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

时间:2015-02-19 17:48:45

标签: javascript backbone.js parse-platform

我在网络应用项目中使用版本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"
   },

我想把一个事件放在一个字体很棒的元素中,它有一个类map-view-open-buttonParse在某种程度上与Backbone不同......

这非常有效:

  1. 重新加载页面
  2. 转到视图(点击菜单)
  3. 点击<i>元素 - &gt;我的函数app.driveView.openMapViewInModal运行正常
  4. 我可以打开模态(运行函数)几次,它可以工作。
  5. 但是,如果我点击菜单并转到另一个视图,然后返回app.driveView,那么该活动将无法正常工作。如果单击app.driveView.openMapViewInModal元素,则不会调用函数<i>

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

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

    这是我到目前为止所尝试的。我以为我可以删除渲染功能上的事件,然后再次创建它。问题是渲染函数只会被调用一次(第一次访问时)。如果我离开视图并返回,则不会调用渲染函数,这非常奇怪,因为我的路由器指向此函数(显式调用render):

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

    任何想法?

    感谢。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。这真的很奇怪而且违背了我的期望,但我不是专家,所以我的期望并不是真的“有效”。

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

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"})

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

注意:我认为Backbone和Parse之间存在差异,不知道为什么。任何评论和讨论都表示赞赏。