ko observablearray:直接推送和分配之间的区别

时间:2016-04-25 16:54:22

标签: javascript knockout.js

我有一个observablearray定义为:

model.permitList = ko.observableArray([]);

我用一组对象初始化它。我这样做有所不同

  model.permitList (arrayOfObjects) 

VS。

当我这样做时

  for(var i=0; i<arrayOfObjects.length; i++ ){
    model.permitList().push(arrayOfObjects(i));
  }

我知道存在差异,因为当我尝试使用

在我的视图中的表格中显示数据时
  <tbody data-bind="foreach: model.permitList">

只有第一种方法有效。

有人知道这两种方法的区别吗?非常感谢。

2 个答案:

答案 0 :(得分:1)

使用第二种方法,您将获得具有实际Array的值,而不是ObservableArray

for(var i=0; i<arrayOfObjects.length; i++ ){
  model.permitList.push(arrayOfObjects(i));
}

这将改变可观察数组。

执行model.permitList()时,会返回包含每个值的本地Array对象。当你打电话给.push时,它会修改那个数组。 model.permitList然而是一个Knockout对象。

答案 1 :(得分:1)

当您编写model.permitList()时,它就像执行getter函数来获取值一样。在您的情况下,返回的值是一个本机数组,您可以.push使用您的值。这将导致本机数组而不是observableArray。对于挖掘视图绑定工作和值更改以反映您需要observableArray,这只能在您将变量像setter一样使用model.permitList (arrayOfObjects)时才能完成