Parse.View: 当我退出视图并再次进入时事件不起作用

Parse.View: event isn't working when I exit the view and enter it again

我在 Web 应用程序项目中使用版本 1.3.4 中的 Parse JS

<script src="//www.parsecdn.com/js/parse-1.3.4.min.js"></script>

在我的一个观点中,我有这样的声明:

var DrivesView = Parse.View.extend({
  className :'backbone-container',
  options: {},
  events: {
      "click i.map-view-open-button": "openMapViewInModal"
   },

我想在字体很棒的元素中放置一个事件,该元素具有 class map-view-open-buttonParse 在这方面与 Backbone 在某种程度上有所不同...

像这样效果很好:

  1. 重新加载页面
  2. 转到视图(通过单击菜单)
  3. 单击 <i> 元素 --> 我的函数 app.driveView.openMapViewInModal 运行 没问题
  4. 我可以多次打开模式(运行 功能),它有效。

但是,如果我单击菜单并转到另一个视图,然后返回到 app.driveView,则该事件将不起作用。如果我单击 <i> 元素,函数 app.driveView.openMapViewInModal 将不会被调用。

奇怪的是事件仍然存在于视图中。我用 app.drivesView.events 检查了它。

我是否需要在离开时以某种方式关闭视图(如何?)然后再次渲染它以便重新创建事件?

这是我目前所尝试的。我以为我可以删除渲染函数上的事件,然后重新创建它。问题是渲染函数只会被调用一次(在第一次访问时)。如果我离开视图再回来,渲染函数将不会被调用,这真的很奇怪,因为我的路由器指向这个函数(显式调用 render):

drivesViewer: function(){
    $('#app').html(this.driveView.render().el);
  },

有什么想法吗?

谢谢。

我终于找到了解决办法。这真的很奇怪而且出乎我的意料,但我不是专家,所以我的期望并不是真的"valid"。

这就是我所做的。在查看器功能上,我删除了视图:

drivesViewer: function(){
    this.drivesView.remove();
    $('#app').html(this.driveView.render().el);
  },

然后,在 'DrivesView' 声明中,我删除了 'events' 属性并将这些行放在 'render' 函数中:

this.undelegateEvents();
this.delegateEvents({"click i.map-view-open-button": "openMapViewInModal"})

现在,每次加载视图时,我都会删除视图,然后取消委托事件(不确定是否真的需要),然后设置新事件。有用。

注意:我觉得Backbone和Parse在这里是有区别的,不知道为什么。对此的任何评论和讨论表示赞赏。