1

toJSON()モデルを返して編集する の機能のような機能を持つ関数を作りたいです。

私の質問は、モデルの属性を反復し、選択した属性の特定の値を編集する方法です。

モデルがある場合:

Item = Backbone.Model.extend({
    defaults: {
        name: '',
        amount: 0.00
    },
    toHTML: function(){
        // i think this is the place where
        // where i can do that function?

        //
        console.log(this.attribute)
    }
});
var item = new Item;

item.set({name: 'Pencil', amount: 5}): 

item.toJSON();
-> {name: 'Pencil', amount: 5}

// this is the function
item.toHTML();
-> {name: 'Pencil', amount: 5.00}
4

3 に答える 3

5

for ... inループを使用してオブジェクトを反復処理してtoFixedから、数値をフォーマットするために使用できます。

toHTML: function() {
    var attrs = { }, k;
    for(k in this.attributes) {
        attrs[k] = this.attributes[k];
        if(k === 'amount')
           attrs[k] = attrs[k].toFixed(2);
    }
    return attrs;
}

amountそれは文字列として出てくることに5.00注意してください5toHTML書式設定はテンプレートに任せて、この実装に煩わされることはないと思います。

デモ: http://jsfiddle.net/ambiguous/ELTe5/

于 2013-09-27T03:54:10.687 に答える
4

ここで提供される答えは正しく、あなたが望むことをします。しかし、この目的にはアンダースコア関数を使用する方が良いと思います。単純なループのために使用できます

_.each(list, iteratee, [context])

_.each(model.attributes, function(item, index, items){
  console.log(item);
  console.log(index);
})

特定のニーズに応じて特殊な機能を使用することもできます。リストのすべての要素に何らかの関数を適用した結果として新しい結果配列が必要な場合と同様に、 map が最適なオプションです。

_.map(list, iteratee, [context])

var newList = _.map(model.attributes, function(item, index, list){
  return item * 5;
})

必要に応じて最適な機能を得るには、アンダースコアとバックボーンのドキュメントを参照することをお勧めします。

于 2015-04-15T03:18:44.263 に答える