4

attr 関数で jQuery セレクターを使用するバックボーン ビューである選択オプション タグ ビューで 'multiple'='multiple' 属性を強制しようとしていますが、機能させることができないようです。これが私のコードです:

window.MyListView = Backbone.View.extend({

tagName:'select',
    className: 'mySelect',

initialize:function () {
},

render:function (eventName) {
    $(".mySelect").attr('multiple', 'multiple');
    _.each(this.model.models, function (myModel) {
        $(this.el).append(new MyListItemView({model:myModel}).render().el);
    }, this);
    return this;
} 

まったく機能していません。これを回避するアイデアや他の方法はありますか?select multiple タグのみを使用して新しいビューを作成し、それに myListItemView オブジェクトを追加したほうがよいでしょうか?

ありがとう、ジミー

4

3 に答える 3

10

'attributes' 属性を使用して、ビューのタグに必要な任意の属性を指定できます。


Backbone.View.extend({
  tagName: "select",
  attributes: {
    "multiple": "multiple"
  }
});
于 2012-04-28T23:34:44.117 に答える
9

おそらく、これが機能しない理由は、ビューがまだ DOM にアタッチされていないため、$(".mySelect") がノードを見つけられないためです。

render()メソッドの実行中にビュー内のノードを操作したい場合、ビューの を操作したい場合el、Backbone にはそれを行うためのヘルパーがいくつかあります。

  • this.el- ビューのルート ノード
  • this.$el- ビューのルート ノードの jquery オブジェクト。
  • this.$({some selector})- ルート ノードで開始する jquery セレクター。

このヘルパーは、ビューのノードが DOM にアタッチされる前に (最も一般的には、最初にビューを作成するコードによって) ビューのノードで動作します。

したがって、複数の属性を追加するコードは次のようになります

    window.MyListView = Backbone.View.extend({

        tagName:'select',
        className: 'mySelect',

        initialize:function () {
        },

        render:function (eventName) {
            this.$el.attr('multiple', 'multiple');
            return this;
        }
    });
于 2012-04-28T23:01:06.667 に答える
0

「複数」の選択の問題は解決されましたが、アンダースコアよりもクリーンなソリューションのように見える Ed が提案したように、this.collection.each(myItem)... を繰り返してみましたが、アイテムがそこにある場合でもビュー内のアイテムをレンダリングしない:

/*_.each(this.model.models, function (myModel) {            
$(this.el).append(new   MyListItemView({model:myModel}).render().el);        }, this);  */  

this.collection.each(function(myItem){ 
             console.log(myItem.id);
             $(this.el).append(new MyListItemView({model:myItem}).render().el);
    }); 

MyListItemView で引数の状態を見に行きましたが、すべて問題ありません。何かご意見は?ありがとう

于 2012-04-29T07:39:24.723 に答える