如何在knockout.js中执行所有observableArray依赖项后执行函数

时间:2013-03-08 11:38:45

标签: javascript jquery knockout.js

我有一个observableArray。我想在observableArray中删除或添加项目之后以及在完成所有依赖项订阅调用之后执行函数。喜欢:

 observableArray.push(newObject);

 //I can't put my function call at this point because if any subscription is..
 //with newObject or observableArray will execute asynch, and i.. 
 //want my function to execute after all such subscription execution.  

有没有办法在淘汰赛中实现这一目标?

2 个答案:

答案 0 :(得分:1)

我认为事件是异步触发的,所以我写了以下Live JSFiddle

var flagUpdater = ko.observable(0),
    aList = ko.observableArray(["Foo", "Bar", "Baz"]);

flagUpdater.subscribe(function() {
  console.log("Change the flag now!");
});

aList.subscribe(function() {
  console.log("Schedule flag update");
  flagUpdater("blah");
});

aList.push("Qoo");

但它不起作用。似乎回调都是同步处理的,即一旦修改器函数(例如push())返回,所有回调都已经返回。因此,您可以在操作数组(live)后简单地设置标志:

aList.push("Qoo");
flag = "CHANGED";
console.log("Flag is now " + flag);

答案 1 :(得分:1)

我不确定observableArray.push()是否会返回true,但请试一试;

if (observableArray.push(newObject)) {
    console.log(observableArray);
}