4

以下のコードに問題があるようです。HTML に id='content' の div 要素があります。el プロパティの 'body' 要素を div 要素に置き換えたかったのですが、el: $('div') または el:$('div#content') または el: $( '#コンテンツ')。私は backbone.js の初心者であり、私の理解では、この el プロパティは、すべてのテンプレートが子要素として追加される親タグを保持していると考えています (この場合、'body' タグが親であり、'p' タグが子)。

(function($){
    var ListView = Backbone.View.extend({
    el: $('body'),      

    initialize: function(){
        this.render();
    },

    render: function(){
        (this.el).append("<p>Hello World</p>");
    }
});

var listView = new ListView();
})(jQuery);
4

1 に答える 1

8

プロパティは、View.elHTML要素への参照ではなく、jQueryセレクター(文字列)として定義する必要があります。

バックボーンのドキュメントから:

var BodyView = Backbone.View.extend({
  el: 'body'
});

またはあなたが望むように、

el:'div#content'

ビューが初期化されると、Backboneはで要素を参照しview.$el、キャッシュされたjQueryオブジェクトであるプロパティを介してその要素を使用できるようにします。

this.$el.append("<p>Hello World</p>");

投稿したサンプルコードは機能します。これは、body要素が常に1つだけであり、ビューがレンダリングされたときにその要素がDOMにすでに存在しているためです。したがって、を宣言するel:$('body')と、body要素への参照を取得します。renderthis.elがjQueryオブジェクトへの直接参照になっているため、のコードは機能します。

(this.el).append("<p>Hello World</p>");

既存のDOM要素(セレクターではない)を使用してバックボーンビューを初期化する必要がある場合、バックボーンのドキュメントでは、初期化関数でそれを渡すことを推奨しています。

于 2012-12-13T07:30:26.133 に答える