1

http://jsfiddle.net/gZC5k/1004/でネストされたフォームをゆっくりと拡張しています。ネストされた JSON 配列内の子の数を計算するために使用したい ko.computed を動作させるのが困難になっています。壊れるコードは // これで壊れる

    self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
    return {
        firstName: ko.observable(contact.firstName),
        lastName: ko.observable(contact.lastName),
        isKey: ko.observable(contact.isKey),
        gender: ko.observable(contact.gender),
        phones: ko.observableArray(ko.utils.arrayMap(contact.phones, function (phone) {
            return {
                type: ko.observable(phone.type),
                number: ko.observable(phone.number),
                calls: ko.observableArray(phone.calls),
                callsVisible: ko.observable(false)
            };
        })),
        addresses: ko.observableArray(contact.addresses),
        optionGender: optionGender,
        phonesVisible: ko.observable(false),
        addressesVisible: ko.observable(false),

// this breaks            
//            numberOfPhones: ko.computed(function (contact) {
//                return contact.phones.length;
//            });
    };
}));

エラーはどこにありますか?

4

2 に答える 2

1

各連絡先を関数として作成する必要があると思います。

var ContactModel = function(contact)
{
    var self = this;
            self.firstName = ko.observable(contact.firstName);
            self.lastName = ko.observable(contact.lastName);
            self.isKey = ko.observable(contact.isKey);
            self.gender = ko.observable(contact.gender);
           self. phones = ko.observableArray(ko.utils.arrayMap(contact.phones, function (phone) {
                return {
                    type: ko.observable(phone.type),
                    number: ko.observable(phone.number),
                    calls: ko.observableArray(phone.calls),
                    callsVisible: ko.observable(false)
                };
            }));
            self.addresses = ko.observableArray(contact.addresses);
            self.optionGender = optionGender;
            self.phonesVisible = ko.observable(false);
            self.addressesVisible = ko.observable(false);

            self.numberOfPhones = ko.computed(function () {
                return self.phones().length;
            });
        return self;
};

そして、次のように作成します。

self.contacts = ko.observableArray(ko.utils.arrayMap(contacts, function (contact) {
        return new ContactModel(contact);
    }));
于 2013-02-26T14:11:49.793 に答える
0

これを試すことができます:

numberOfPhones: ko.computed(function () {
                return contact.phones.length;
     })
于 2013-02-26T15:18:33.293 に答える