2013-03-08 9 views
6

में निष्पादित ऐरे निर्भरताएं मेरे पास एक अवलोकन योग्य है। मैं एक अवलोकन योग्य से किसी आइटम को हटाने या जोड़ने के बाद और इसकी सभी निर्भरता सदस्यता कॉल के पूरा होने के बाद एक फ़ंक्शन निष्पादित करना चाहता हूं। पसंद:सभी अवलोकन के बाद फ़ंक्शन निष्पादित करने के लिए कैसे करें knockout.js

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

अद्यतन के बाद आप किस तरह की चीज करना चाहते हैं? आप कॉलबैक को फ़ोरैच बाइंडिंग में परिभाषित कर सकते हैं जिन्हें सरणी आइटम बदल दिए जाने के कारण निकाल दिया जाता है। http://knockoutjs.com/documentation/foreach-binding.html - नोट 7 देखें। क्या यह ऐसी चीज है जिसे आप चाहते थे? –

+0

मैं एक ध्वज को अद्यतन करना चाहता हूं जिसे मैं निर्भरता में उपयोग कर रहा हूं जो अवलोकन करने योग्य ऐरे ऑपरेशंस (पुश, पॉप ..etc) के बाद निष्पादित करता है, इसलिए मैं यह ध्वज अवलोकन करने योग्य सरणी के लिए सभी निर्भरता निष्पादन को पूरा करने के बाद ही अद्यतन करना चाहता हूं और नया वस्तु जो सरणी में सम्मिलित है। – gaurav

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

उत्तर के लिए धन्यवाद, लेकिन क्या आप कृपया अपने सुझाव का विस्तार कर सकते हैं, यदि इसमें एक उदाहरण है तो यह बहुत अच्छा होगा – gaurav

+0

@JCN कोड नमूना देखें – Raffaele

1

मुझे यकीन है कि नहीं कर रहा हूँ अगर observableArray.push() सच वापस आ जाएगी, लेकिन यह एक शॉट देने के;

if (observableArray.push(newObject)) { 
    console.log(observableArray); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे