2016-03-30 22 views
1

を期待どおりに動作しません:

var BookView = Backbone.View.extend({ 
    tagName: "div", 
    className: "bookContainer", 

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

    render: function() { 
     this.$el.html("Hello World"); // Problem is here 
     return this; 
    } 
}); 

var bookView = new app.BookView({}); 

問題があり、Hello Worldは私がthis.$elを使用して参照指定divで追加取得されていません。私がしなければ

代わりに、この(方法render()で):

$(".bookContainer").html("Hello World"); 

それが正常に動作します。 this.$el$(".bookContainer")を参照していないのはなぜですか?

注:あなたがページにbookViewを挿入する必要があり

[div.bookContainer, context: div.bookContainer] 

答えて

3

を見つけることができますあなたはどのようにtagNameclassName仕事を誤解。 fine manualから:

ELview.el
[...]
this.elはDOMセレクタ文字列または要素から分割することができます。それ以外の場合は、ビューのtagName,className,idおよびattributesプロパティから作成されます。

のでtagNameclassNameプロパティは、elを作成DOMでそれを見つけることができませんに使用されています。既存の要素にビューをバインドしたい場合は、elを使用します。

el: '.bookContainer' 
+0

ありがとう、私はこれを知らなかった。私のindex.htmlから元の 'div.bookContainer'を削除した後、今すぐ動作します。ありがとう – akshayKhot

0

:私はthis.$elを記録した場合、私は次のオブジェクトを取得します。

あなたがのHTML含まBackbone.Viewのインスタンス持っbookView = new app.BookView({});呼び出します。ただし、この要素はまだDOMに挿入されていない

<div class="bookContainer"> 
    Hello World 
</div> 

を。あなたはまだそれを行う必要があります。例として:elへの参照がBackbone.Viewの要素である

bookView = new app.BookView({}); 

// put the bookview element into the dom 
$('body').html(bookView.el); 

、これに関するドキュメントはhere

+0

申し訳ありませんが、私は私のポストでこれを追加するのを忘れ、私はすでに私のhtmlでこれを持っています。

akshayKhot

+0

@akshayKhot、私はmuの答えを読む瞬間、彼はあなたが探している答えを持っていることを認識しました。 – fbynite

+0

はい、努力をいただきありがとうございます。 – akshayKhot

関連する問題