3

私は backbone.js を使用していますが、何か間違ったことをしているのか、それともバックボーンがどのように動作するのかを理解しようとしています。

私はテーブルを作成しています。そのため、2 つのテンプレートがあります。最初のテンプレートは<thead>、質問に関係のないすべてのコンテナーと情報です。

次に、アイテムのコレクションを行にレンダリングしています。このビューで:

   MYAPP.Menu.ItemView = Backbone.View.extend({
    tagName: 'tr',      
    template: template('menu-item'),
    initialize : function(modelItem) {
    this.model = modelItem;
    this.model.on('all', this.render, this);
    },
    render : function() {
        var html = this.template(this.model.toJSON());
        this.$el.html(html);
        return this;
    }
});

これはメニュー項目のテンプレートです:

  <script type="text/x-mustache-template" id="menu-item-template">
            <td>{{title}}</td>
            <td>{{description}}</td>
            <td>{{price}}</td>
            <td>{{status}}</td>
            <td></td>
    </script>

<tbody>タグ内で取得している出力は次のとおりです。

     <tr id="1" title="title1" price="price1">
            <td>title1</td>
            <td></td>
            <td>price1</td>
            <td></td>
            <td></td>
    </tr>

等々。 ここに質問があります

すべてのデータが<tr>タグ内に属性として保存されるのはなぜですか? 私はそれをしたくありません。なぜそこにあるのですか?

ありがとう。

4

1 に答える 1

10

ほとんどの場合、次のようにビューを初期化します。

new MYAPP.Menu.ItemView(someModel);

これは正しくありません。正しい方法はoptions、キーを使用してオブジェクトにモデルを渡すことmodelです。

new MYAPP.Menu.ItemView({model:someModel});

モデル属性が要素の属性として設定されているという事実は、名前付けのちょっとした偶然の一致です。Backbone.Modelその値を。というプロパティに内部的に格納しますattributesBackbone.View一方attributes、options引数で呼び出されたオプションを受け入れ、それをにコピーしますView.attributes。これにより、それらがルート要素の属性として設定されます。

ビューに自動的にコピーされるいくつかの特別なプロパティがあります:、、、、idおよび、cssClassほんの 数例を挙げると。モデルは単なるオブジェクトであるため、呼び出すことはと同等であり、それはあなたが見ている奇妙な効果を引き起こします。elmodelcollectionnew View(model)new View({id:id, attributes:attributes, ...})

したがって、コンストラクターコードを見ると、次のようになります。

initialize : function(options) {
   this.model = options.model;
   this.model.on('all', this.render, this);
}

ただし、Backboneは、を含むビューのオプションの一部を設定するので、model厳密に言えば、設定する必要はありませんthis.model

initialize : function(options) {
   this.model.on('all', this.render, this);
}
于 2013-01-16T20:18:35.673 に答える