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));
我不知道这是正确的方法,但它有效吗?
我仍然有兴趣学习更好的方法。
解决方案
如果没有上下文,我无法确定您的代码的哪些部分是相关的,因此这可能是一个过于简化的示例。在 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" />
推荐阅读
- php - ajax成功后jquery返回php代码
- c# - C#:在二叉搜索树中根据类别列出项目而不使用集合类
- google-sheets - 将雅虎金融股票价格刮到谷歌表格
- sql - 如何交叉 5 个不属于同一个表的 sql 查询,并且每个查询都有数百万个数据作为输出
- python - 如何在 ffmpeg-python 中使用多个地图值?
- c# - 在c#中使用[可选]参数后如何知道它是否由调用方法给出?
- python - 在 python 中,每个元素都是 1x1 矩阵,我如何使每个元素都不分开?
- android - Android Studio 中应用程序、项目、模块等的所有不同名称是什么
- python - 从python中的目录过滤文件列表
- html - iframe 中的内容安全策略设置