在我的js代码中,我注意到许多语句,如:
model.set({someAttribute : !model.get("someAttribute")});
所以我认为在模型中定义自定义方法可能很有用:
toggle: function(attr, silent){
this.set({attr: !this.get(attr)}, silent? {silent:true} : {});
}
问题是,javascript javascript将'attr'视为实际的键名而不是正式的函数参数,因此上面的代码不起作用。有什么建议如何解决这个问题? 我想要一个优雅的单线解决方案。
答案 0 :(得分:4)
没有一个优雅的单行解决方案。为了使用attr
作为键,您必须声明对象文字,然后使用[]
语法设置它:
toggle: function(attr, silent){
var data = {}, value = this.get(attr);
data[attr] = !value;
this.set(data, {silent: silent});
}
答案 1 :(得分:0)
嗯,你在函数的“静音”部分有(编辑)各种语法错误,我不确定它是什么,所以我会专注于你的问题手。这是你要找到的最优雅的解决方案,我认为......“优雅”当然是主观的。
无论如何,在参数初始化中无法使用变量键名,因此需要在临时对象上使用索引运算符。
以下是我解决它的方法:
toggle: function(attr, silent) {
var setter = {};
setter[attr] = !this.get(attr);
this.set(setter, silent? {silent: true} : {});
}
答案 2 :(得分:0)
toggle: function( attr, s ){
this.set(
function( aname, aval ){
var o = {};
o[aname] = !aval;
return o;
}( attr, this[attr] ),
s? {silent:true}:{}
)
}