1

リストを作成するためのマスター ビューがあります。このビューには、「さらにアイテムをロードする」ためのクリック イベントがあります。
マスター ビューを拡張する 2 つのサブ ビューがあります。
私の問題は、1 つのビューの [さらに読み込む] ボタンをクリックすると、他のビューに影響することです (以前に読み込まれた場合)。別のビューを初期化する前にビューを閉じる必要があることは理解していますが、私のビューはマスター ビューを拡張しているため、このメソッドは機能しません (マスター オブジェクトを閉じ、他の子ビューは初期化されません)。

Backbone.View.prototype.close = function(){
  this.remove();
  this.unbind();
}

私のマスタービュー:

App.Views.List = Backbone.View.extend({
    events: {
        'click .load-btn' : 'loadMore'
    },
    loadMore: function(e)
    {
        this.collection.increase().fetch({
            add: true
        });
        e.preventDefault();
    }  
}

.increase は、api パラメータを増やすためのカスタム メソッドであることに注意してください。

子ビュー:

App.Views.Projects = App.Views.List.extend({
    initialize: function()
    {
        this.itemView = App.Views.Project;
        this.collection = new App.Collections.Projects();
        this.parent('initialize');
    },
    render: function()
    {
        this.template = _.template(App.Tpl.get('projects.list'));
        this.parent('render');
    }
});

.parent は、マスター ビューのメソッドを呼び出すカスタム メソッドであることに注意してください。
そのため、ビューの load-more ボタンをクリックすると、すでに初期化されている場合は、マスター ビューから拡張されたすべてのビューで loadMore メソッドを呼び出そうとします。

私は何をすべきか?

4

2 に答える 2

1

App.Views.Projectsイベントを拡張App.Views.Listし、定義しないため、親ビューから継承されます。これは.load-btn、プロジェクト ビュー内のすべての要素にハンドラ セットがあることを意味します。

プロジェクトビューに空のイベントハッシュを追加することで、これを修正できるかもしれません。

App.Views.Projects = App.Views.List.extend({
  events: {},
  initialize: function()
  ...
});
于 2012-03-14T15:04:13.893 に答える
0

デフォルトを防ぐ代わりに e.stopPropagation() を使用します。それは同様の問題で私を助けました。

于 2012-03-14T18:12:39.030 に答える