के साथ एक मॉडल पर एक गतिशील संपत्ति कैसे सेट करें कहानी: मेरे पास बहुत सारी संपत्तियां सेट की जानी चाहिए। चूंकि उनके पास समानताएं हैं, इसलिए मैं कक्षा को पढ़ना चुनता हूं, इनपुटबॉक्स संपत्ति नाम के रूप में हिस्सा है।बैकबोन.जेएस
समस्या: किसी ऑब्जेक्ट की गतिशील प्रॉपर्टी को एक एसोसिएटिव सरणी की तरह सेट किया जा सकता है। तो मैं
var customattribute = this.$el.parents('div').attr('id');
var value = $(e.currentTarget()).val();
this.model.attributes[customattribute] = value;
लेकिन यह मॉडल की एक परिवर्तन घटना को ट्रिगर नहीं करेगा। मैं मैन्युअल रूप से एक परिवर्तन ईवेंट ट्रिगर कर सकता हूं, लेकिन यह इस अद्यतन को अपडेट नहीं करेगा। Model.changedAttributes(), मुझे केवल परिवर्तित विशेषता सेट करने की आवश्यकता है, प्रत्येक विशेषता नहीं।
निश्चित रूप से यह काम नहीं करता है या तो:
this.model.set(customattribute: value);
तो मैं कैसे इस समस्या को संभाल होगा?
मेरे पास ALOT (200+) विशेषताएँ सेट की जा सकती हैं, मैं प्रत्येक विशेषता के लिए अलग ईवेंटलिस्टर्स नहीं बनाना चाहूंगा जब तक कि यह एकमात्र तरीका न हो।
कोड:
var Display = Backbone.View.extend({
className: 'display',
events: {
'slide .slider' : 'sliderHandler'
},
initialize: function(){
_.bindAll(this, 'render', 'sliderHandler','update');
this.model.on('change',this.update, this);
},
render: function(){
this.$el.html(_.template(html, {}));
this.$('.slider').slider();
return this;
},
sliderHandler: function(e){
var slider = $(e.currentTarget);
var property = slider.parents('div').attr('id');
var value = slider.slider('value');
this.model.attributes[property] = value;
},
update: function(){
console.log(this.model.changedAttributes());
//get changed attribute + value here
},
});
संपादित करें:
दो जवाब नीचे इसे हल। किसी ऑब्जेक्ट पर गुणों को मानचित्र करें और उसे बैकबोन दें। इसके अलावा मुझे एक और समाधान मिला। किसी ऑब्जेक्ट के बजाय, model.set() भी एक सरणी स्वीकार करता है।
model.set(customattribute, value, customattribute2, value2);
के बराबर है आप रीढ़ मॉडल के लिए HTML तत्वों से मूल्यों का प्रचार करने के लिए जब वे बदल कोशिश कर रहे हैं? –
एक उपयोगकर्ता एक इनपुट बॉक्स भर जाएगा या एक स्लाइडर का उपयोग करेगा। जब किसी भी बदलाव का मूल्य, मुझे पहचानने की आवश्यकता होगी कि वह कौन से 200 इनपुट को डीओएम आईडी पढ़कर बदल गया है। इनपुटबॉक्स/स्लाइडर और डीओएम आईडी $ (e.currentTarget) के मूल्य का उपयोग करना। पेरेंट्स ('div')। Attr ('id'), मैं मॉडल अपडेट करता हूं, जो इस मॉडल के परिवर्तन ईवेंट को सुनने वाले अन्य विचारों को अपडेट करेगा । – Jareish