如何切换backbone.js的模型属性?

时间:2011-09-12 09:16:01

标签: javascript backbone.js

在我的js代码中,我注意到许多语句,如:

model.set({someAttribute : !model.get("someAttribute")});

所以我认为在模型中定义自定义方法可能很有用:

toggle: function(attr, silent){
    this.set({attr: !this.get(attr)}, silent? {silent:true} : {});
}

问题是,javascript javascript将'attr'视为实际的键名而不是正式的函数参数,因此上面的代码不起作用。有什么建议如何解决这个问题? 我想要一个优雅的单线解决方案。

3 个答案:

答案 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}:{}
    )
}