Javascript ko-Array:推送和直接分配之间的区别

Javascript ko-Array:推送和直接分配之间的区别,javascript,knockout.js,Javascript,Knockout.js,我有一个可观察的Array定义为: model.permitList = ko.observableArray([]); 我正在用一个对象数组初始化它。当我这样做的时候是有区别的 model.permitList (arrayOfObjects) for(var i=0; i<arrayOfObjects.length; i++ ){ model.permitList().push(arrayOfObjects(i)); } vs 当我这么做的时候 mode

我有一个可观察的Array定义为:

model.permitList = ko.observableArray([]);
我正在用一个对象数组初始化它。当我这样做的时候是有区别的

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

当我这么做的时候

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

for(var i=0;i使用第二种方法,您使用的是实际的
数组
,而不是
可观察数组

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

for(var i=0;i使用第二种方法,您使用的是实际的
数组
,而不是
可观察数组

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

for(var i=0;i当您编写
model.permitList()时)
,这就像执行一个getter函数来获取值。在您的情况下,返回的值是一个本地数组,您可以在该数组上
。推送
您的值。这将导致一个本地数组,而不是observableArray。要使敲除视图绑定起作用并改变值以反映您需要一个
observableArray
,这只能通过当您在编写
model.permitList()时,像setter一样使用变量作为
model.permitList(arrayofoobjects)
,这就像执行一个getter函数来获取值。在您的情况下,返回的值是一个本地数组,您可以在该数组上
。推送
您的值。这将导致一个本地数组,而不是observableArray。要使敲除视图绑定起作用并改变值以反映您需要一个
observableArray
,这只能通过当您像setter一样使用变量作为
model.permitList(arrayOfObjects)

谢谢,您的解释在很大程度上帮助我消除了混淆。谢谢,您的解释在很大程度上帮助我消除了混淆。