Library
他のモデルのコレクションを含むバックボーンモデル(それを呼び出すことができます)を作成しようとしています(それらを呼び出すことができますBooks
)。これLibraryView
は、 によって生成された HTML によって表される本のセットを含むブック ケースの HTML を作成しますBookView
。また、テンプレート システムとして Handlebars.js を使用しています。
私が経験している問題は、関数BookView
を介して渡す前に、 this.el 要素に奇妙な html を返すことrender()
です。
LibraryModel モデル
var LibraryModel = Backbone.Model.extend({
initialize: function() {
var books = new BookCollection();
_.each(book_data.books, function(value, index) {
books.add(new Book());
});
this.books = books;
}
});
LibraryView ビュー:
var LibraryView = Backbone.View.extend({
el: "#library",
render: function() {
var t = this;
this.model.books.each(function(book, index) {
//create new view for each Book model in the books collection
var view = new BookView(book);
//append HTML produced by the BookView into LibraryView el element
t.$el.append(view.render().$el);
});
return this;
},
initialize: function() {
//snip
}
});
BookView ビュー:
var BookView = Backbone.View.extend({
render: function() {
var viewmodel = this.model;
var source = $("#book-template").html();
var template = Handlebars.compile(source);
var html = template(viewmodel.toJSON());
console.log(html); //prints <div test="wtf" anotherTest="123"><b>wtf</b> 123</div>
this.$el.html(html);
return this;
},
initialize: function(book) {
console.log(this.el.outerHTML); //prints <div test="wtf" anotherTest="123"></div>
this.model = book;
this.listenTo(this.model, "change", this.render);
}
});
私が提供しているテンプレートは次のとおりです。<b>{{test}}</b> {{anotherTest}}
BookModel モデル
var BookModel = Backbone.Model.extend({
defaults: {
test: "wtf",
anotherTest: 123
},
initialize: function() {
//snip
}
});
基本的に、私が経験している問題は、次のようにBookView
、各モデル属性が Backbone-generateddiv
に添付されている奇妙な HTML を生成することです。
<div test="wtf" anotherTest="123">
<b>wtf</b> 123
</div>
コードの他の場所に属性を設定していません-両方の値はデフォルトからのみ取得されます。
div
また、Model-attributes は HTML-attributesとしてモデルから生成された Backbone に挿入されるため、これは Handlebars が行っていることではないことを確認しましたBookView
(注、tagName または el を手動で提供していません。Backbone に div を作成してもらいたいです)。 )。
だからここが私が立ち往生しているところです。BookView
リスト内のモデルごとに生成された HTML の完全に機能するリストがありますが、何らかの理由で、バックボーンによって生成された div ラッパーには、次のように HTML 属性に各モデル属性が含まれています。
<div id="#library">
<div test="wtf" anotherTest="123"><b>wtf</b> 123</div>
<div test="wtf" anotherTest="123"><b>wtf</b> 123</div>
<div test="wtf" anotherTest="123"><b>wtf</b> 123</div>
</div>
私は本当にこれについて髪を引っ張っています.View-in-a-Viewを使用しようとしているという事実と関係があるのではないかと疑っています。
以前に同様の問題に遭遇したことがありますか? MasterView が ChildViews のコレクションをレンダリングするバックボーン アプリケーションの良い例はありますか?