![](/img/trans.png)
[英]How can I dynamically set a className for a Backbone.js view based on it's model attributes?
[英]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.