2013-03-08 15 views
6

我有一個observableArray。我想在從observableArray中刪除或添加一個項目並完成其所有依賴項訂閱調用之後執行一個函數。喜歡:如何在knockout.js中執行所有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. 

有沒有什麼辦法在淘汰賽中做到這一點?

+0

更新後你想要做什麼樣的事情?您可以在foreach綁定中定義回調,並在陣列項發生更改時觸發。 http://knockoutjs.com/documentation/foreach-binding.html - 見注7.這是你想要的東西嗎? – 2013-03-08 11:45:10

+0

我想更新一個標誌,我也在observableArray操作(push,pop .. etc)後執行的依賴項中使用,所以我希望這個標誌只有在完成observable數組的所有依賴項執行後纔會更新,新的在數組中插入的項目。 – gaurav 2013-03-08 12:17:56

+0

你在說什麼依賴性訂閱?當你創建新對象時,他們不會被解僱嗎?你可以創建一個jsFiddle來展示你的意思嗎? – 2013-03-08 14:29:45

回答

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); 
+0

謝謝你的回答,但是請你詳細說明你的建議,如果它包含一個例子,那麼它會很棒 – gaurav 2013-03-08 12:54:49

+0

@JCN查看代碼示例 – Raffaele 2013-03-08 12:57:32

1

我不知道如果observableArray.push()將返回true,但給這個一杆;

if (observableArray.push(newObject)) { 
    console.log(observableArray); 
} 
相關問題