私は、Backbone.jsについて学びながら、Todosサンプルアプリケーションbundled with the latest version of Backbone(0.9.2)で作業しています。私の質問は、なぜアプリケーションがTodosコレクションにモデルを追加するときにレンダリングイベントを2回発生させるように設計されているかです。Backbone.jsは、コレクションに2回レンダリングを実行します。
私はTodoViewの機能レンダリング中にこの行を配置する場合: "!レンダリング" すると
// Re-render the titles of the todo item.
render: function() {
console.log("Rendering!");
this.$el.html(this.template(this.model.toJSON()));
をコンソールに2回表示されます。私は、ビューは、ビューのレンダリングには、モデルの変更イベントを結合するので、これは理解:
initialize: function() {
this.model.bind('change', this.render, this);
とレンダーはaddOneで呼び出され、トドスにバインドされたイベントを追加します。
addOne: function(todo) {
var view = new TodoView({model: todo});
this.$("#todo-list").append(view.render().el);
},
しかしありますこのダブルレンダリングデザインの標準的な練習ですか?ビューが作成時(またはDOMへの入り口)にレンダリングされるように見えるように見えます。この場合、何も変更されていませんが、レンダリングは2回呼び出されています。
また、私はバックボーンを学んでいるだけなので、私は混乱の原因となる基本的な誤解があるかもしれません。
良いキャッチ!..イベントトリガーを避けるために '{silent:true}'を使うこともできます。 – fguillen
あなたが正しいのは、それが変更イベントが発生している理由です。ただし、提案した方法でコードを変更すると、イベントが停止するだけでなく機能が停止します(アイテムを削除できなくなります)。明らかにこれは私の質問に答える点ではあまり重要ではありませんが、将来の誰かがこれを読んでいる場合に備えて、私はそれを指摘したいと思います。 – jcady
アイテムを削除する_permanently_です。削除後、私がリフレッシュすると、それらはまだ存在します。 – jcady