【问题标题】:Backbone Layout Manager subview's events doesn't work after reload重新加载后主干布局管理器子视图的事件不起作用
【发布时间】:2013-04-10 04:12:19
【问题描述】:

我正在使用 Backbone Layout Manager Boilerplate。不幸的是,发生了一个非常令人沮丧的错误。我喜欢将项目列表呈现为由 insertView 函数插入的子视图。在第一次加载时一切正常。但是重新加载后,点击事件不再起作用:(。我已经尝试在 TableItem 视图上手动调用 delegateEvents() 但没有任何改变。我希望任何人都可以给我一个线索。

App.Views.Item = Backbone.View.extend({
  template: "templates/item",
  tagName: "li",
  events: {
    "click .applyButton" : "apply",
    "click .viewDetailsButton" : "showDetail"
  },
  serialize: function() {
    return { table : this.model.toJSON() };
  },
  apply: function(ev) {
    ev.preventDefault();
    alert("apply button clicked");
  },
  showDetail: function(ev) {
    ev.preventDefault();
    var id = this.model.get("_id");
    app.router.navigate("#events/"+ id, {trigger : true})
  }
});

/*
 * List View
 */

 App.Views.List = Backbone.View.extend({
   template: "templates/list",

   tagNam: "ul",
   className: "tableList",

   beforeRender: function() {
     var events = this.model.get("userEvents").get("hosting");


     events.each(function(model) {
       this.insertView(new App.Views.Item({ model : model }));
     }, this);
   },

   serialize: function() {
     return {};
   }
});

【问题讨论】:

  • 我也有同样的问题。我的猜测是,每次在顶视图或任何子视图上调用渲染时,您都必须手动委派事件......对我来说工作正常,但我不确定这是最好的解决方案

标签: backbone.js backbone-events backbone-boilerplate backbone-layout-manager


【解决方案1】:

我想你可能想在你的 Item 视图上添加一个 cleanup 函数到 undelegate layoutmanager 删除视图时的事件。我不知道这是否能解决您的问题,但这似乎是一种很好的做法。

当您说重新加载后时,您的意思是使用浏览器重新加载按钮重新加载页面吗?如果是这样,你如何让它首先工作?

如果您可以提供您的设置的 jsfiddle 或将我们指向一个 repo 以便我们可以在我们的机器上测试它,这将有所帮助。确保包含路由器,以便我们查看视图和包含它的布局是如何初始化的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多