2014-05-15 83 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