7

मैं किसी भी समय मॉडल को बदलने के लिए किसी भी बदलाव को बदलने के लिए एक बदलाव घटना चाहता हूं। क्या यह संभव है? कर इसके अलावा:बैकबोन - क्या एक संपत्ति को छोड़कर, एक मॉडल में एक बदलाव घटना को बांधना संभव है?

model.bind('change:prop1', func); 
model.bind('change:prop2', func); 
model.bind('change:prop3', func); 
etc.... 

या वैकल्पिक रूप से, वहाँ जो संपत्ति ईवेंट हैंडलर के भीतर से परिवर्तन शुरू हो गया पता लगाने के लिए एक तरीका है?

धन्यवाद

उत्तर

11

आप model.bind('change',function() {/*...*/}) का उपयोग करें और समारोह उपयोग hasChanged में कर सकता है विशेषताओं की जांच: if(model.hasChanged('propIWantToExclude')) return;

+0

क्या कोई प्रश्न के पहले भाग का जवाब दे सकता है? अर्थात। जब भी मैं मॉडल की किसी भी संपत्ति को बदलता हूं, एक बदलाव घटना को कैसे फायर करें, एक को छोड़कर? –

+0

^प्रतिक्रिया में जैसे "परिवर्तन" का उपयोग करें ... हालांकि मुझे लगता है कि इसे संपादित किया गया था, इसलिए आपने शायद संपादन से पहले पूछा था :) – gthmb

0

प्रश्न के पहले भाग का जवाब देने के डेविड tuite के अनुरोध के जवाब में आप के लिए एक समारोह सेट कर सकते हैं "बदले" ईवेंट का जवाब दें और फिर एक कस्टम ईवेंट ट्रिगर करें यदि आप जिस संपत्ति को अनदेखा करना चाहते हैं वह बदला नहीं गया था।

यह तर्क कस्टम ईवेंट को ट्रिगर करेगा: 'somePropertyOtherThanThePropIWantToExcludeChanged' यदि संपत्ति बदली नहीं गई थी। यदि एक से अधिक गुण एक पर ध्यान नहीं देना चाहते हैं, तो कस्टम घटना सहित, बदल रहे थे नहीं आग होगा भी: जब 'propIWantToExclude' और कुछ अन्य विशेषताओं एक साथ बदल रहे हैं

model.bind('change', function(){ 
    if(!model.hasChanged('propIWantToExclude')){ 
     model.trigger('somePropertyOtherThanThePropIWantToExcludeChanged'); 
    } 
}); 
3

जस्टिन जवाब ऊपर वापस आ जाएगी। आप शायद ऐसा नहीं करना चाहते हैं, इसलिए आपको model.changedAttributes के आकार को भी देखना चाहिए:

if(model.changedAttributes.length == 1 && model.hasChanged('attrIWantToExclude')) { 
    return; 
} 
+0

यह होना चाहिए: "model.hasChanged ('attrIWantToExclude') && Object.keys (model.changedAttributes()) लंबाई == 1 "। या "ऑब्जेक्ट.कीज (मॉडल .changed) .length == 1 && ..."। बदले गए एट्रिब्यूट्स एक फंक्शन है और यह बदले गए ऑब्जेक्ट्स का हैश या झूठ देता है यदि कोई नहीं है। हैश। लम्बाई काम नहीं करता है इसलिए आपको इस तरह कुछ चाहिए: ऑब्जेक्ट.कीज (हैश)। लम्बाई। बदले गए बदले में बदले जा सकते हैं एट्रिब्यूट्स और ऑब्जेक्ट.कीज (झूठी) त्रुटियों, ताकि आपको बदले गए ऑब्जेक्ट्स (या अन्य संदर्भ आंतरिक मॉडल .changed) पर Object.keys संदर्भ से पहले एक चेंज परीक्षण की आवश्यकता हो। - http://backbonejs.org/#Model-changedAttributes –

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