मुझे यह जांचने की कोशिश में कुछ रोचक विपत्तियां थीं कि विचार घटनाओं के लिए सही तरीके से बंधे थे या नहीं। रीढ़ की हड्डी में, हम आमतौर पर प्रारंभिक विधि में घटनाओं से जुड़ते हैं, something.bind("change", this.render);
की रेखाओं के साथ कुछ का उपयोग करते हैं। मेरे परीक्षण में, मैं यह सुनिश्चित करना चाहता हूं कि यह बाध्यकारी स्थापित हो गया है, इसलिए मैंने निम्न कार्य किया:जैस्मीन के साथ backbone.js अनुप्रयोग का परीक्षण - एक दृश्य पर मॉडल बाइंडिंग का परीक्षण कैसे करें?
this.myView = new MyView();
spyOn(this.myView, "render");;
this.legendView.groupData.trigger("change");
expect(this.legendView.render).toHaveBeenCalled();
लेकिन, यह काम नहीं करेगा। चूंकि बाइंड MyView के प्रारंभिक फ़ंक्शन में होता है, इसलिए ईवेंट उस समय मेरे व्यू के प्रस्तुत करने के लिए बाध्य हो जाता है। इसलिए, जब आप अपना जासूस जोड़ते हैं, तो यह रेंडर फ़ंक्शन को लपेटता है और इसे वापस मेरेView.render पर सेट करता है। लेकिन पहले बांध से निर्मित बंद अभी भी मौजूद है, और हम पूरी तरह से होज कर रहे हैं। तो इसके बारे में हमारे द्वारा क्या किया जा सकता है?
myView = Backbone.View.extend({
initialize: function(){
_.bindAll(this, "render");
this.initialize_model_bindings();
},
initialize_model_bindings: function(){
something.bind("change", this.render);
},
render: function(){ //... }
});
और अपने परीक्षण तो लगता है कि:: मैं क्या किया था, को स्थानांतरित मेरी बाँध कॉल की एक अलग कार्य करने के लिए, कुछ की तरह है
this.myView = new MyView();
spyOn(this.myView, "render");
this.myView.initialize_model_bindings();
this.legendView.groupData.trigger("change");
expect(this.legendView.render).toHaveBeenCalled();
यह काम करता है, लेकिन मैं एक बेहतर समाधान के लिए देख रहा हूँ । धन्यवाद
क्या आप इस बिंदु को समझाते हैं "लेकिन पहले बांध से बनाए गए बंद अभी भी मौजूद हैं, और हम पूरी तरह से फिर से हो गए हैं"? मुझे एक ही समस्या है और यह समझने की कोशिश कर रहा है कि क्या हो रहा है। धन्यवाद। –
जब आप 'नया MyView() 'कहते हैं, प्रारंभिक विधि को कॉल किया जाता है, और उस समय ऑब्जेक्ट में मौजूद फ़ेंडर फ़ंक्शन परिवर्तन ईवेंट से जुड़ा होता है। उस बिंदु से, रेंडर फ़ंक्शन तक पहुंचना असंभव है जो परिवर्तन ईवेंट से जुड़ा हुआ है - यह बंद होने में बंद है। स्पष्टीकरण के लिए – idbentley
धन्यवाद। –