推出后Knockout Observable Array更改

时间:2018-05-30 20:00:48

标签: knockout.js

我正在将项目推送到一个可观察的数组中,如此

var self = this;  
self.myArrayIwanttoAddTo = ko.observableArray([]);

self.myObjectIAmPushing = { 
 item1:ko.observable(),
 item2: ko.observable()
  }

  self.AddItemToUpdate = function (data) {
 self.myArrayIwanttoAddTo.push( new ko.observableArray([data]));
 }   

 self.AddMyData = function() {
  self.AddItemToUpdate(myObjectIAmPushing);
   self.myObjectIAmPushing.item1("");
   self.myObjectIAmPushing.item2("");
  }

我也试过push(data)

我能够第一次添加,但当我清除我的对象的所有属性并将其添加到我要添加到它的数组时,将值更改为第二次推送的值

所以第一次推送看起来像这样= {item1: 'A', item2: 'B'} 当我清除所有属性并再次添加我得到

{item1: 'C', item2:'D'},{item1: 'C', item2:'D'}

*感谢@Jason Spake的回复

我得到以下工作

   self.AddItemToUpdate = function(data){
 function myObjecttoPush(item1,item2){
this.item1 = item1;
this.item2 = item2;
}
 var data2 = ko.toJS(data);
var items = new myObjecttoPush(data2.item1, data2.item2)
self.myArrayIwanttoAddTo.push(new myObjecttoPush(items.item1, items.item2));

我不知道这是正确的方法,但它有效吗?

我仍然有兴趣学习更好的方法。

1 个答案:

答案 0 :(得分:1)

如果没有上下文,我无法确定代码的哪些部分是相关的,因此这可能是一个过于简化的示例。在javascript中,您可以通过几种不同的方式创建新对象。此示例使用对象初始值设定项({...}语法)。有关更多选项,请参阅Working_with_Objects



function viewModel(){
  var self = this;  
  self.myArray = ko.observableArray([]);
  self.myArray.push({item1: "A", item2: "B"});

  self.AddMyData = function() {
    self.myArray.push({
      item1: ko.observable("C"),
      item2: ko.observable("D")
    });
  }
  
}

ko.applyBindings(new viewModel());

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<span data-bind="text: ko.toJSON(myArray)"></span>
<br/>
<input type="button" data-bind="click: AddMyData" value="Add C,D" />
&#13;
&#13;
&#13;