2014-05-15 85 views
0

我有一個非常簡單的模型設置,我有一個存儲在observableArray中的電子郵件地址列表。這些可通過foreach數據綁定進行編輯,但綁定似乎只是一種方式。當我更改文本框中的值時,更改不會反映在模型中。但是,如果我更新陣列外部的另一個字段,該更新會觸發綁定更新foreachKnockout observableArray數據綁定不被更新

我有一個小提琴證明此位置:

http://jsfiddle.net/xeLcy/1/

及有關HTML是這裏

<div data-bind="foreach: addresses"> 
    <input type="text" data-bind="value: $rawData.address, valueUpdate: 'input'" /> 
    <button data-bind="click: $parent.removeAddress">Remove</button> 
    <br/> 
</div> 

在機型是

var Model = function() { 
    var self = this; 
    self.modelName = ko.observable("modelName"); 
    self.maxCount = 4; 
    self.addresses = ko.observableArray(); 

    self.addUser = function(email) { 
    self.addresses.push({address: email}); 
    }; 

    self.removeAddress = function(email) { 
    self.addresses.remove(email); 
    }; 

    self.hasEmpty = ko.computed(function() { 
     var hasBlank = false; 
     ko.utils.arrayForEach(self.addresses(), function(item){  
     if (item.address === ""){ 
      hasBlank = true; 
      return; 
     } 
     }); 
     return hasBlank; 
    }); 

    self.allowAddMore = ko.computed(function() { 
    return self.hasEmpty() === false && self.addresses.length <= self.maxCount; 
    }); 

    self.addNew = function() { 
    if (!self.hasEmpty()){ 
     self.addresses.push({address: ''}); 
    } 
    }; 
}; 

回答

3

你的地址是不是觀察到的。更改addUser到:

self.addUser = function(email) { 
    self.addresses.push({address: ko.observable(email)}); 
}; 

見更新小提琴:http://jsfiddle.net/nyothecat/xeLcy/2/

+1

謝謝!知道我不得不錯過簡單的事情。 – Joe