首页 > 解决方案 > 推送后淘汰可观察数组更改

问题描述

我正在将项目推入一个可观察的数组,就像这样

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

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

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

标签: knockout.js

解决方案


如果没有上下文,我无法确定您的代码的哪些部分是相关的,因此这可能是一个过于简化的示例。在 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" />


推荐阅读