私はバックボーンが初めてで、ビューの内容を再レンダリングしようとしています。コードをjsfiddleに入れました...
ユーザーが再レンダリングをクリックすると、dom のコンテンツを削除して新しいアイテムのみを表示するにはどうすればよいですか?
私はバックボーンが初めてで、ビューの内容を再レンダリングしようとしています。コードをjsfiddleに入れました...
ユーザーが再レンダリングをクリックすると、dom のコンテンツを削除して新しいアイテムのみを表示するにはどうすればよいですか?
QuestionView
最も安全なのは、インスタンスを .xml 内で追跡することですAppView
。次に、新しいものを追加する前remove
にそれぞれを呼び出すことができます。メソッドは次のQuestionView
とおりです。remove
DOM からビューを削除するための便利な関数。
$(view.el).remove()
;を呼び出すのと同じです。
remove
ビューは、非 DOM イベントからバインドを解除してゾンビを防ぐ独自の実装を提供する必要があります。デフォルトでは単にビューel
を DOM から削除しますが、最初からこれを行うと、コードが必然的に変更された場合でも問題なく動作し続けます。
最初に、モデルにバインドしたイベントを削除するメソッドをQuestionView
持つように調整します。remove
var QuestionView = Backbone.View.extend({
//...
remove: function() {
this.model.off('change', this.render);
this.$el.remove();
}
});
次に、 をAppView
追跡するためにいくつかの調整が必要になりますQuestionView
。
var AppView = Backbone.View.extend({
//...
initialize: function() {
//...
this.sub_views = [ ];
//...
},
//...
addOne: function(question) {
var view = new QuestionView({
model: question
});
this.sub_views.push(view); // <----------------------- Add this
this.$("#question-list").append(view.render().el);
},
addAll: function() {
for(var i = 0; i < this.sub_views.length; ++i) // <--- And these three lines
this.sub_views[i].remove();
this.sub_views = [ ];
Questions.each(this.addOne);
}
デモ: http://jsfiddle.net/ambiguous/FF9eG/
また、新しいスタイルに合わせてon
andoff
の代わりにbind
andを使用するようにコードを更新しました。unbind
Backbone の新しいバージョンには、キャッシュされたバージョンの$(this.el)
inもあるので、this.$el
それを使用するようにコードを更新しました。