如何使用Backbone.js在模型上设置动态属性
故事:我有很多需要设置的属性。 由于他们有相似之处,我选择将inputbox作为属性名称的一部分读出该类。
问题:可以像关联数组一样设置对象的动态属性。 所以我可以做
var customattribute = this.$el.parents('div').attr('id');
var value = $(e.currentTarget()).val();
this.model.attributes[customattribute] = value;
但是这不会引发模型的变化事件。 我可以手动触发更改事件,但这不会更新this.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
},
});
编辑:
下面的两个答案解决了它。 将这些属性映射到一个对象并将其提供给Backbone。 我还找到了另一种解决方案 model.set()也可以接受一个数组,而不是一个对象。
model.set(customattribute, value, customattribute2, value2);
链接地址: http://www.djcxy.com/p/53365.html
上一篇: How to set a dynamic property on a model with Backbone.js
下一篇: can't access backbone collection through object notation