Javascript中的Setter+;这条路对吗?
我得到了这个“目标” set方法Javascript中的Setter+;这条路对吗?,javascript,syntax,backbone.js,Javascript,Syntax,Backbone.js,我得到了这个“目标” set方法setName不能这样做: 我试过了,但没用 setName: function(name){ this.get(name) = name; } 或 还有别的办法吗?我不能总认为原来的方式太难看,用不上。原来的方式对我来说最合适。必须在模型上调用set(),主干的事件系统才能正常工作。您的两个示例没有多大意义(即,将值赋给值,并对值而不是模型调用set() 实际上,我认为添加自己的setName方法有点奇怪。任何编程Backbone.js的人都应该知道如何在
setName
不能这样做:
我试过了,但没用
setName: function(name){
this.get(name) = name;
}
或
还有别的办法吗?我不能总认为原来的方式太难看,用不上。原来的方式对我来说最合适。必须在模型上调用set(),主干的事件系统才能正常工作。您的两个示例没有多大意义(即,将值赋给值,并对值而不是模型调用set()
实际上,我认为添加自己的setName方法有点奇怪。任何编程Backbone.js的人都应该知道如何在模型实例上使用内置的set()函数来设置属性值。我觉得原来的方法最好。必须在模型上调用set(),主干的事件系统才能正常工作。您的两个示例没有多大意义(即,将值赋给值,并对值而不是模型调用set()
实际上,我认为添加自己的setName方法有点奇怪。任何编程Backbone.js的人都应该知道在模型实例上使用内置的set()函数来设置属性值。为了清楚起见,我将参数名称更改为
newName
。而:
this.set({name: newName});
方法:使用新值newName
参数(正确)设置名为name
的属性值,此形式:
setName: function(newName){
this.get(newName) = newName;
}
什么也不做。它获取一个属性,该属性的名称在newName
参数中提供,并返回该属性。这项任务无效
另一方面,这:
setName: function(newName){
this[newName].set(newName);
}
可能会抛出一个错误<代码>此是主干模型对象。它包含属性
属性,因此可能:
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
。为了清楚起见,我将参数名称更改为newName
。同时:
this.set({name: newName});
方法:使用新值newName
参数(正确)设置名为name
的属性值,此形式:
setName: function(newName){
this.get(newName) = newName;
}
不执行任何操作。它获取一个属性,该属性的名称在newName
参数中提供,并返回该属性。赋值无效
另一方面,这:
setName: function(newName){
this[newName].set(newName);
}
可能会引发错误。此
是主干模型对象。它包含属性
属性,因此可能:
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
。据我所知,这是标准方式,如果有更好的方式,我会让更有经验的骨干用户回答。据我所知,这是标准方式,如果有更好的方式,我会让更有经验的骨干用户回答。