जानते हुए भी कि तुम क्या कर रहे हैं के बिना आप बस एक नई डोम तत्व बाध्य करने के लिए चाहते हैं तो आप applyBindings
समारोह के लिए एक पैरामीटर के रूप में इस तत्व पारित कर सकते हैं बिल्कुल ठीक है, ऐसा लगता है कि आप इसके बारे में गलत तरीके से जा रहे हैं। आपका विचार आपके दृश्य मॉडल द्वारा संचालित किया जाना चाहिए। तो आपको सीधे डोम तत्वों को नहीं जोड़ना चाहिए, इसके बाद आपको नॉकआउट बाइंडिंग लागू करने की आवश्यकता है।
इसके बजाय आपको दृश्य में परिवर्तन को दर्शाने के लिए अपना दृश्य मॉडल अपडेट करना चाहिए, जिसके बाद आपका नया तत्व प्रकट हो सकता है।
तो उदाहरण के लिए, आपके $('body').append('<a href="#" data-bind="click: something">Click me!</a>');
के लिए, बटन को दिखाई देने पर DOM तत्व जोड़ने के बजाय, दृश्य मॉडल का उपयोग करके बटन दृश्यता को नियंत्रित करें।
तो आपके विचार मॉडल
var viewModel = { clickMeAvailable: ko.observable(false) }
भी शामिल है और अपने HTML
<a href="#" data-bind="click: something, visible: clickMeAvailable">Click me!</a>
जब ऐसा आवेदन स्थिति परिवर्तन मुझे बटन पर क्लिक करें उपलब्ध है तो बस viewModel.clickMeAvailable(true)
भी शामिल है, तुम।
ऐसा करने का बिंदु, और नॉकआउट का एक बड़ा हिस्सा प्रस्तुति से व्यावसायिक तर्क को अलग करना है। तो कोड जो मुझे उपलब्ध कराता है, परवाह नहीं करता है कि मुझे क्लिक करें एक बटन शामिल है। जब मैं क्लिक करता हूं तो यह सब viewModel.clickMeAvailable
अपडेट होता है।
उदाहरण के लिए, मुझे क्लिक करें एक सहेजें बटन है जो एक फॉर्म वैध रूप से भरने पर उपलब्ध होना चाहिए। आप formValid
मॉडल को देखने योग्य देखने के लिए सहेजें बटन दृश्यता को जोड़ देंगे।
लेकिन फिर आप फॉर्म को वैध होने के बाद चीजों को बदलने का फैसला करते हैं, एक कानूनी समझौता दिखाई देता है जिसे सहेजने से पहले सहमति दी जानी चाहिए। आपके फॉर्म का तर्क बदलता नहीं है - यह फॉर्म वैध होने पर भी formValid
सेट करता है। formValid
परिवर्तनों में परिवर्तन होने पर आप बस बदलेंगे।
चूंकि इस जवाब पर टिप्पणियों में लसम्बरा बताते हैं, ऐसे मामले हैं जब प्रत्यक्ष डोम हेरफेर आपका सबसे अच्छा दृष्टिकोण हो सकता है - उदाहरण के लिए एक जटिल गतिशील पृष्ठ जहां आप केवल दृश्य के हिस्सों को हाइड्रेट करना चाहते हैं, क्योंकि उनकी आवश्यकता होती है। लेकिन आप नॉकआउट चिंताओं के अलगाव को छोड़कर कुछ कर रहे हैं। सावधान रहें यदि आप इस व्यापार को बंद करने पर विचार कर रहे हैं।
क्या आप कुछ कोड पोस्ट कर सकते हैं यह दिखाने के लिए कि आप क्या कर रहे हैं? –
अच्छी तरह से, उदाहरण के लिए कुछ: $ ('body')। संलग्न करें ('Click me!'); –
मुझे यकीन नहीं है कि सहायक उत्तर प्रदान करने के लिए पर्याप्त संदर्भ है। मैं समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, लेकिन आपके कोड की एक पूर्ण तस्वीर (क्यों/जब आप नए डोम तत्वों को इंजेक्ट कर रहे हैं) के साथ इसका ख्याल रखने का सबसे अच्छा तरीका जवाब देना मुश्किल है। यह आपके वर्तमान समाधान को देखने के बाद हो सकता है कि कोई भी नए तत्वों को इंजेक्ट करने के लिए एक तरीका बता सकता है या आप जो करने की कोशिश कर रहे हैं उसके लिए एक कामकाज है। –