簡體   English   中英

如何切換backbone.js的模型屬性?

[英]How to toggle backbone.js's model attributes?

在我的js代碼中,我注意到許多語句,如:

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

所以我認為在模型中定義自定義方法可能很有用:

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

問題是,javascript javascript將'attr'視為實際的鍵名而不是形式的函數參數,因此上面的代碼不起作用。 有什么建議如何解決這個問題? 我想要一個優雅的單線解決方案。

對此沒有優雅的單線解決方案。 為了使用attr作為鍵,你必須聲明對象文字,然后使用[]語法設置它:

toggle: function(attr, silent){
  var data = {}, value = this.get(attr);
  data[attr] = !value;
  this.set(data, {silent: silent});
}

好吧,你已經(編輯)了函數的“靜音”部分的各種語法錯誤,我不確定它是什么,所以我將專注於你手頭的問題。 這是你要找到的最優雅的解決方案,我認為......“優雅”當然是主觀的。

無論如何,在參數初始化中無法使用變量鍵名,因此您需要在臨時對象上使用索引運算符。

這是我解決它的方式:

toggle: function(attr, silent) {
    var setter = {};
    setter[attr] = !this.get(attr);
    this.set(setter, silent? {silent: true} : {});
}
toggle: function( attr, s ){
    this.set(
        function( aname, aval ){
            var o = {};
            o[aname] = !aval;
            return o;
        }( attr, this[attr] ),
        s? {silent:true}:{}
    )
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM