2011-12-14 1 views
3

私は、バックボーンビューで次のシナリオを実行しています。私はそのようにモデルを設定したいと思います。バックボーンモデルを設定する

saveField : function(field, val){ 
    //field = 'username'; val = 'Boris' 
model.set({field : val}); 
} 

フィールドは、モデル内の属性の文字列表現です。

問題は、バックボーンがフィールドの名前で新しい属性を作成していることです。 私はしかしそう

model.attributes[field] = val; 

ようにそれを設定することができ、私はむしろセットを使用すると思います。

私はこれをどのように行うことができますか? おかげ

編集: - すでにを動作するはずバックボーンsourceこの見れ

var asObj = new Object; 
asObj[field] = val; 
model.set(asObj); 
+2

私はそれを行うのと同じ方法で行います。 – Paul

+0

あなたは 'var asObj = {};'とすることができますが、より短いが、キーは文字列です。また、あなたは 'model.attribytes [field] = val;'と 'model.changed();'できますが、それはもっと醜い(そしてafaik "changed:"イベントは消えません) –

+0

@Paul –

答えて

4

- やってしまったあなたの呼び出しは少しだけ違って見える必要があります。

saveField : function(field, val){ 
    //field = 'username'; val = 'Boris' 
    model.set(field, val); 
} 

あなたが探している引数の形式はset(key, value, options)です。これは一度に1つの属性しか設定できないことを意味しますが、それはあなたがしたいことのようです。代替形式はset(attr, options)です。これは使用していたものの、文字列キーでは機能しません。

バックボーンが内部的にこのフックを使用して 'changed'イベントを発生させるなどの理由で、属性を直接設定する必要はありません。

+0

ありがとう@TheDeeno私はそれについて既に知られていませんでした。 – Paul

関連する問題