あなたNoteListViewはその外に何も書かないでしょうel(例:http://jsfiddle.net/ambiguous/cFvX2/)ので、あなたの問題は別の場所にあります。
私の推測では、あなたはこれと同等のことをしていたと思います:
var v = new App.view.NoteListView;
$('#notes').html(view.render().el);
#notesこれにより、テーブルの内容が<tbody>(つまりNoteListView)だけに完全に置き換えられelます。
あなたの問題を回避する方法はいくつかあります。呼び出しrenderて、返されるものを無視することができます。
var v = new App.view.NoteListView;
v.render();
それは私の最初のデモフィドルがやったことです。
または、の代わりにidandtagNameelを使用できます。
App.view.NoteListView = Backbone.View.extend({
id: 'notesTableBody',
tagName: 'tbody',
initialize:function () {
this.model.bind("reset", this.render, this);
},
render:function (eventName) {
_.each(this.model.models, function (note) {
$(this.el).append(new App.view.NoteListItemView({model:note}).render().el);
}, this);
return this;
}
});
そしてappend、ビューのelto $('#notes'):
var v = new App.view.NoteListView;
$('#notes').append(v.render().el);
デモ: http://jsfiddle.net/ambiguous/HTAkM/
呼び出し元に次を指定させることもできますel。
App.view.NoteListView = Backbone.View.extend({
initialize:function () {
this.model.bind("reset", this.render, this);
},
render: function(eventName) {
_.each(this.model.models, function (note) {
$(this.el).append(new App.view.NoteListItemView({model:note}).render().el);
}, this);
return this;
}
});
そして、の戻り値を気にせずにrender:elrender
var v = new App.view.NoteListView({ el: $('#notesTableBody') });
v.render();
デモ: http://jsfiddle.net/ambiguous/2Ptkp/
私がここにいる間は、$(this.el)もうその必要はありません。Backbone の最近のバージョンでは、this.$el次のようなビューが提供されています。
$エル view.$el
ビューの要素のキャッシュされた jQuery (または Zepto) オブジェクト。常に DOM 要素を再ラップするのではなく、便利なリファレンスです。
ビューがコレクションをラップしている場合は、this.collection代わりに次を使用する必要がありますthis.model。
new SomeView({ collection: some_collection })
ビューはcollectionオプションを次のように特別にmodel扱います。
コンストラクター/初期化 new View([options])
[...] 渡された場合、ビューに直接アタッチされる特別なオプションがいくつかあります: model、collection、el、id、className、tagNameおよびattributes。
バックボーン コレクションにはいくつかの Underscore メソッドも混在しているため、次のように言う必要はありません。
_.each(some_collection.models, function(m) { ... });
コレクションで直接呼び出すことができますeach:
some_collection.each(function(m) { ... });
また、"reset"イベントにバインドしている場合:
this.model.bind("reset", this.render, this);
さらに何かを追加する前に、renderをクリアする必要があるでしょう。el
render: function() {
this.$el.empty();
this.collection.each(function(note) { ... });
}
そうしないとempty、elおそらくその内容を新しいものに置き換えるつもりであるときに、さらに多くのものを追加することになります。