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

ko observablearray: Difference between push and assigning directly

本文关键字:分配 之间 区别 observablearray ko      更新时间:2023-09-26

我有一个可观察数组定义为:

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

我正在使用对象数组初始化它。当我这样做时会有所不同

  model.permitList (arrayOfObjects) 

与。

当我这样做时

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

我知道有区别,因为当我尝试

使用
  <tbody data-bind="foreach: model.permitList">

只有第一种方法有效。

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

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

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

这将改变可观察数组。

执行此操作时model.permitList()返回一个包含每个值的本机Array对象。当您调用.push时,它会修改该数组。 然而,model.permitList是一个挖空对象。

当你写model.permitList()时,就像执行一个getter函数来获取值一样。在您的情况下,返回值是一个本机数组,您可以在其上.push值。这将导致一个本机数组,而不是可观察数组。要使挖空视图绑定起作用并值更改以反映您需要一个observableArray,这只有在您使用变量(如二传手)作为model.permitList (arrayOfObjects)时才能完成