Для ясности я меняю имя аргумента на newName
. В то время как:
this.set({name: newName});
означает: установить значение атрибута с именем name
с новым значением newName
параметр (правильный), эта форма:
setName: function(newName){
this.get(newName) = newName;
}
ничего не делает. Он получает атрибут, имя которого указано в параметре newName
, и возвращает его. Назначение не имеет никакого эффекта.
С другой стороны это:
setName: function(newName){
this[newName].set(newName);
}
, вероятно, выдаст ошибку. this
- объект модели Backbone. Он содержит свойство attributes
, поэтому, вероятно:
this.attributes[newName] = newName;
более разумно (измените атрибут, имя которого передается в параметре newName
на значение newName
. Однако в этом случае событие change
не будет инициировано. Но позвольте мне догадаться, это то, что вы действительно хотел:
setAttr: function(name, value){
var diff = {};
diff[name] = value;
this.set(diff);
}
В этом случае вы можете позвонить:
model.setAttr('id', 7);
Что эквивалентно:
model.setAttr({id: 7});
и запускает change:id
правильно.