0

我知道错误是由 jQuery 生成的。有什么方法可以构建一个backbone.marionette 应用程序来避免以下错误?

Uncaught TypeError: Cannot call method 'show' of undefined

发生错误是因为我创建了一个具有区域的布局。在 onRender 函数中,我加载一个集合并执行 fetch。提取完成后,我填充该区域。如果我切换到不同的视图,则会因为 self.content.show 不再存在而触发错误。

var view = Marionette.Layout.extend({
    template: _.template(tplPage),
    className: 'customers-view',
    regions:{
        content: '.customers-content'
    },

    onRender: function(){
        var self = this,
            colCustomers = new ColCustomers();

        colCustomers.fetch({success: function(){
            self.content.show(new ViewCustomersList({collection: colCustomers}));
        }});
    }
});

注意:目前我将 self.content.show() 包装在 try catch 中并且它的工作。理想情况下,我会避免这种情况。

4

1 回答 1

1

修改onRender函数并以不同的方式监听 fetch。

onRender: function(){
  var colCustomers = new ColCustomers();
  this.listenTo(colCustomers, "sync", function () {
    this.content.show(new ViewCustomersList({collection: colCustomers}));
  });
  colCustomers.fetch();
}

我所做的是改变绑定事件监听器的方法。通过使用listenTofrom 函数Backbone.Events,您可以获得在侦听器对象死亡时免费清理的处理程序。

于 2013-07-11T16:15:17.893 回答