骨干视图:卡住Zombie Events

时间:2013-09-12 14:56:20

标签: backbone.js marionette

我的代码获取了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);
          }
});

请帮助我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试使用主干listenTo功能。它会附加到调用它的任何内容上,所以当你的ItemView被释放时,事件监听器也会被处理掉。

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

如果你确实需要它,它还有一个stopListening方法。删除视图后,它应自动停止侦听listenTo

调用的所有内容

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

相关问题