2013-02-26 79 views
1

http://jsfiddle.net/gZC5k/1004/處緩慢擴展我的嵌套表單我正在運行ko.computed,我想用它來計算嵌套JSON數組中的子數。打破的代碼是//此破解基於計算可觀察數據在陣列長度上的敲除模型

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; 
//   }); 
    }; 
})); 

錯誤在哪裏?

回答

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); 
    })); 
+0

保羅,thx 4你的建議,不幸的是它沒有工作。對於我應該在哪裏定義函數,我也有我的懷疑。 – Graphileon 2013-02-26 14:47:08

+0

有沒有錯誤,或者它只是不顯示正確的值? – 2013-02-26 14:54:41

+0

它打破了代碼..在jsfiddle它現在被註釋掉,否則數據不會加載 – Graphileon 2013-02-26 15:00:09

0

你可以試試這個:

numberOfPhones: ko.computed(function() { 
       return contact.phones.length; 
    }) 
+0

儘管如此,如果用戶使用該表單添加電話號碼,它不會更新? – 2013-02-26 15:28:44

+0

它不會需要創建視圖模型,因爲保羅更新它將工作 – 2013-02-26 15:35:35

+0

好吧,我認爲是,只是檢查我沒有錯過任何東西(這是已知的事情!)。 – 2013-02-26 15:38:25