2012-08-16 12 views
6

वास्तव में KnockoutJs (http://knockoutjs.com) का आनंद लेने शुरू कर रहा है। मेरे अधिकांश वेब ऐप्स AJAX संचालित हैं। पूरी साइट लोड हो गई है और फिर लिंक से लिंक तक हम केवल AJAX कॉल के माध्यम से शरीर की सामग्री को बदलते हैं।नॉकआउट.जेएस अजाक्स संचालित पृष्ठों पर बाध्यकारी

जब AJAX नई बॉडी सामग्री के साथ वापस आती है तो मैं अपना नॉकआउट बाइंडिंग कर सकता हूं। कोई बात नहीं। जब मैं अगले पृष्ठ से लिंक करता हूं (केवल शरीर को बदलने के साथ एक AJAX कॉल)। नॉकआउट इमारतों, मुझे लगता है कि अभी भी स्मृति में हैं, लेकिन वास्तव में बाध्य नहीं है क्योंकि डोम बदल गया है। इस विषय पर कुछ सवाल।

  1. पर यह यह वास्तव में है कि बुरा है सिर्फ स्मृति में सुस्त के नॉक आउट वस्तु तरह छोड़ने के लिए अगले पृष्ठ किसी भी नॉकआउट नहीं है, तो? बेहतर अभी तक नॉकआउट ऑब्जेक्ट को रीसेट (साफ़) करने का कोई तरीका है?

  2. जब मैं एक ऐसे पृष्ठ से जाता हूं जहां नॉकआउट बाइंडिंग्स नॉकआउट बाइंडिंग्स को सिर्फ कॉल करने के लिए कॉल कर रहा है। ऐप्पली बाइंडिंग्स() फिर से पुरानी चीजें साफ़ कर देती है और नई चीजों को पुनर्जीवित करती है? (एक बार फिर जब मैं एक पृष्ठ से दूसरे पृष्ठ पर जाता हूं तो मैं सिर्फ अजाक्स कॉल के साथ शरीर को पुनः लोड कर रहा हूं)।

  3. क्या नॉकआउट में कोई "लाइव" बाइंडिंग है। JQuery की लाइव बाइंडिंग की तरह सॉर्ट करें? इस तरह नॉकआउट को आगे बढ़ाया जा सकता है और फिर सामग्री परिवर्तन से सामग्री परिवर्तन में पुन: लागू नहीं किया जाना चाहिए।

सामान्य तौर पर मैं पर सलाह के लिए देख रहा हूँ कि कैसे सबसे अच्छा उपयोग किसी ऐप जहां ब्राउज़र पृष्ठ से पृष्ठ पर ताज़ा नहीं है पृष्ठ से पृष्ठ नॉकआउट के लिए।

सहायता के लिए अग्रिम धन्यवाद।

+2

यह प्रश्न बाइंडिंग को रीसेट करने के संबंध में मदद कर सकता है: http://stackoverflow.com/questions/10048485/how-to-clear-remove-observable- बाइंडिंग-in-knockout-js – peacemaker

उत्तर

1

1) यदि अगले पृष्ठ पर कोई नॉकआउट नहीं है तो क्या यह वास्तव में स्मृति में लिंगरिंग के नॉकआउट ऑब्जेक्ट प्रकार को छोड़ना बुरा है? बेहतर अभी तक नॉकआउट ऑब्जेक्ट को रीसेट (साफ़) करने का कोई तरीका है?

नहीं, यह बुरा नहीं है; लेकिन अगर आप वास्तव में साफ करना चाहते हैं तो आप ko.removeNode पर कॉल कर सकते हैं।


2) जब मैं एक और बस ko.applyBindings() फिर से पुराने सामान स्पष्ट बुला और नई सामग्री rebind करता नॉकआउट बाइंडिंग है कि करने के लिए नॉकआउट बाइंडिंग है कि एक पृष्ठ से जाना? (एक बार फिर जब मैं एक पृष्ठ से दूसरे पृष्ठ पर जाता हूं तो मैं सिर्फ अजाक्स कॉल के साथ शरीर को पुनः लोड कर रहा हूं)।

यह निर्भर करता है।

सबसे पहले, GregT mentioned के रूप में:

एक ही डोम नोड (ओं) पर एक बार से अधिक applyBindings() नहीं बुलाना चाहिए।

मैं अनुभव से पता है - एक ही डोम नोड पर एक बार से अधिक ko.applyBindings() कॉलिंग एक स्मृति रिसाव का कारण होगा। [यदि आपको ऐसा करने की आवश्यकता है, तो ko.cleanNode() पर कॉल करें।]

OTOH, यदि आप एक ही डोम नोड पर एक बार से अधिक ko.applyBindings() बुला नहीं कर रहे हैं, तो आप ठीक because होना चाहिए:/जब जोड़ने नोड्स को हटाने

KO कुछ सफाई करेंगे। ऐसा होने वाला सामान्य समय तब होता है जब टेम्पलेट को फिर से प्रस्तुत किया जाता है।


3) नॉकआउट किसी भी "लाइव" बाइंडिंग करता है। JQuery की लाइव बाइंडिंग की तरह सॉर्ट करें? इस तरह नॉकआउट को आगे बढ़ाया जा सकता है और फिर सामग्री परिवर्तन से सामग्री परिवर्तन में पुन: लागू नहीं किया जाना चाहिए।

मुझे पता नहीं है, लेकिन अगर मैं आपके प्रश्न को सही ढंग से समझता हूं, तो आपको अपनी जरूरतों को लागू करने के लिए किसी भी देशी नॉकआउट कार्यक्षमता की आवश्यकता नहीं है। आपको jQuery के on() विधि (क्योंकि live() को बहिष्कृत कर दिया गया है) के साथ स्वयं को तार करने में सक्षम होना चाहिए।

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