एक अवलोकन से स्वचालित रूप से ट्रिगर किए बिना किसी दृश्य को ताज़ा करने के लिए कैसे बाध्य किया जाए?


151

नोट: यह ज्यादातर डीबगिंग और नॉकआउट JS को समझने के लिए है।

क्या पहले से ही दृश्य मॉडल से दृश्य को ताज़ा करने के लिए नॉकआउट को स्पष्ट रूप से अनुरोध करने का एक तरीका है? मैं कुछ इस तरह की तलाश में हूँ:

ko.refreshView();

मैं समझता हूं कि यह नॉकआउट का एक इच्छित उपयोग नहीं है, लेकिन मैं अभी भी जानना चाहता हूं कि क्या डिबगिंग और सीखने के उद्देश्यों के लिए ऐसी कोई विधि है।

जवाबों:


252

आप पूरे व्यूमॉडल पर कुछ नहीं कह सकते हैं, लेकिन एक अलग अवलोकन पर आप myObservable.valueHasMutated()ग्राहकों को सूचित करने के लिए कॉल कर सकते हैं कि उन्हें पुनर्मूल्यांकन करना चाहिए। यह आमतौर पर केओ में आवश्यक नहीं है, जैसा कि आपने उल्लेख किया है।


5
आप डेटा के संदर्भ में भी पुनरावृति कर सकते हैं, उन तत्वों की खोज कर सकते हैं जिनके पास एक valueHasMutatedसंपत्ति है जो प्रकार की है functionऔर उनमें से प्रत्येक के लिए इसे कॉल कर रहे हैं। यह आपके सभी वेधशालाओं को प्राप्त करना चाहिए, लेकिन यह बुरी प्रथा है और आप अनुमान से अधिक संपूर्ण अपडेट को आग लगा देते हैं (गणना की गई निर्भरता श्रृंखला पर विचार करें)।
पैट्रिक एम

यह निश्चित है कि क्रोम में परीक्षण के अलावा और कुछ नहीं होगा तो अच्छा होगा।
स्कॉट रोमैक

आपका viewModel स्वयं, एक अवलोकन योग्य हो सकता है, इसलिए आप myViewModel.valueHasMutated()पूरे दृश्य को अपडेट करने के लिए कॉल कर सकते हैं।
रॉय जे

2
यहाँ सरणियों पर भी काम नहीं करता है। वास्तव में सरणियाँ नॉकआउट में बिल्कुल भी काम नहीं करती हैं। मुझे Angular याद आती है :-(
garryp

2
यह की KO 3.5 के रूप में KnockoutObservableArrays पर काम करता है
Balint

25

कुछ परिस्थितियों में यह केवल बाइंडिंग को हटाने और फिर से लागू करने के लिए उपयोगी हो सकता है:

ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))

संपादन के लिए धन्यवाद ebram ... मुझे लगता है कि मैं उल्लेख करना चाहिए मैं coffeescript का उपयोग करें ;-)
ProfNimrod

15
यह भी देखें कि क्या आप jQuery का उपयोग भी करते हैं (उदाहरण के लिए जब अनुप्रयोग के बिट्स को ko में माइग्रेट करते हैं) तो CleanNode अन्य डोम ईवेंट को भी हटा देगा।
डैन रेवेल

यह पूर्ण है। एक दृश्यदर्शी के लागू होने के बाद मैं नए डोम बच्चों को डेटा-बाइंड विशेषताओं के साथ पहचानने के लिए KO प्राप्त नहीं कर सकता।
एंड्रयू टी फिनेल

उत्तम! काम कर रहे!
jeff_drumgod

0

मैंने अपने bindHTML नॉकआउट बाइंडिंग हैंडलर के साथ एक JSField बनाया है: https://jsfiddle.net/glaivier/9859uq8t/

सबसे पहले, बाध्यकारी हैंडलर को अपनी (या एक आम) फ़ाइल में सहेजें और नॉकआउट के बाद शामिल करें।

यदि आप इस स्विच को अपने बाइंडिंग में उपयोग करते हैं:

<div data-bind="bindHTML: htmlValue"></div>

OR

<!-- ko bindHTML: htmlValue --><!-- /ko -->
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.