1

KOサイト(http://jsfiddle.net/rniemeyer/gZC5k/)で提供されているネストされたエディターのライブサンプルを拡張して、レイアウトを変更し、より深いレベルを追加しようとすると、2つの問題に取り組むことができませんでした。

私はこの段階に到達することができましたがhttp://jsfiddle.net/gZC5k/955/

モデルに正しい階層を構築する際に、どこかで行き詰まりました。

    var ContactsModel = function (contacts) {
var self = this;
self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
    return {
        firstName: contact.firstName,
        lastName: contact.lastName,
        phones: ko.observableArray(contact.phones),
        addresses: ko.observableArray(contact.addresses)
    };
}));

2つの問題は次のとおりです。

  • 初期データセットにロードされている「電話」に新しい「電話」を追加できない(新しい電話を作成すると、「電話」を追加できます)
  • 「通話」を削除できません。

    self.removeCall = function (call) {
    $.each(self.phones(), function () {
        this.calls.remove(call)
    })
    

    };

助けていただければ幸いです。

4

2 に答える 2

1

remove()関数は監視可能な配列を期待しているため、observableArrayとして呼び出しを行います

次に、removeCallメソッドを次のように変更します

self.removeCall = function (call) {
      alert(ko.toJSON(call));
     $.each(self.contacts(), function () {
        $.each(this.phones(), function () {
            alert(ko.toJSON(this));
        this.calls.remove(call)
    })
    })
}; 

addCallメソッドの場合は、 removeCallと同じ構造に従います。

于 2013-02-25T04:19:57.593 に答える
1

モデルを修正しました。このコードをフィドルに置き換えてから確認してください

それは完璧に動作します

self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
    return {
        firstName: contact.firstName,
        lastName: contact.lastName,
        addresses: ko.observableArray(contact.addresses),
        phones: ko.observableArray(ko.utils.arrayMap(contact.phones, function (phone) {
            return{
                type: phone.type,
                number: phone.number,
                calls: ko.observableArray(phone.calls)
            };
        }))
    };
}));
于 2013-02-25T16:49:22.230 に答える