如何一次性将所有值添加到observableArray
?在我的情况下,在循环中添加值非常慢。这是jsfiddle的例子。
jsfiddle
答案 0 :(得分:16)
var myArray = ko.observableArray([]);
var valuesToInsert = [1,2,3];
myArray.push.apply(myArray, valuesToInsert);
就是这样
答案 1 :(得分:8)
由于您正在清除整个可观察数组,因此可以通过以下方式实现:
var viewModel = {
name: "base",
addingValue:new ko.observable(),
someArr: new ko.observableArray(["123","432","sdafasd","xrere"]),
add: function()
{
this.someArr.push(this.addingValue());
},
updateSomeArr:function()
{
var temp = [];
for(var i=0;i<5;i++)
{
temp.push("555565");
}
this.someArr(temp);
}
}
答案 2 :(得分:3)
已经有一个选定的答案,但我认为以下内容会有所帮助。您可以通过执行可观察数组来禁用观察行为以获取底层数组实现:
var underlyingArray = viewModel.someArr();
然后,您可以将项目添加到underlyingArray
,而不会触发someArr
个事件。完成添加项目后,请致电:
viewModel.someArr.valueHasMutated();
这将导致事件触发通知所有依赖于viewModel.someArr()的可观察对象。