0

私のコードは fileType を取得し、それに応じて新しい ImageView を開始します。

var frameIdRegion = new Marionette.Region({
                    el: '#viewerId'
                });


                // Create a new Backbone Marionette View with item model. Render View and Show it on Screen.
                if(fileType === 'Image'){
                    frameIdRegion.close(imageView);
                    frameIdRegion.reset();
                    var imageView = new ImageView({model: item});                   
                    frameIdRegion.show(imageView);              
                    $(".frameId img").show();
                    $(".frameId img").load(function(){
                        $("#fit_to_screen").trigger('click');
                    });
                    imageView.close();
                }
                else if(fileType === 'pdf'){
                    var objectView = new ObjectView({model: item});
                    frameIdRegion.reset();
                    frameIdRegion.show(objectView);
                    $("#pdf_viewer").show();
                    $('#pdf_viewer').trigger('focus');
                }
                else if(fileType === 'unsupported'){
                    var errorView = new ErrorView({model: item});
                    frameIdRegion.reset();
                    frameIdRegion.show(errorView);
                }

しかし、新しい ImageView を開始すると、ImageView の古いインスタンスがクリアされません。そして、私のイベントは何度も発生しています。これは私のImageViewコードです。

    var ImageView = Marionette.ItemView.extend({
          template: template,
          className: 'frameId',
    onClose: function(){
             this.remove();
          this.unbind();
          this.model.unbind("change", this.modelChanged);
          }
});

私が間違っていることを助けてください。

4

1 に答える 1

0

listenToバックボーン機能を使ってみてください。それはそれを呼び出しているものにアタッチされるため、あなたItemViewが破棄されると、イベントリスナーも破棄されます。

http://backbonejs.org/#Events-listenTo

stopListening本当に必要な場合は、メソッドもあります。ビューが削除されると、によって呼び出されたすべてのリッスンを自動的に停止する必要があります。listenTo

http://backbonejs.org/#View-remove

于 2013-09-13T00:42:00.667 に答える