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-button
。 Parse
在这方面与 Backbone
在某种程度上有所不同...
像这样效果很好:
- 重新加载页面
- 转到视图(通过单击菜单)
- 单击
<i>
元素 --> 我的函数 app.driveView.openMapViewInModal
运行 没问题
- 我可以多次打开模式(运行 功能),它有效。
但是,如果我单击菜单并转到另一个视图,然后返回到 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在这里是有区别的,不知道为什么。对此的任何评论和讨论表示赞赏。
我在 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-button
。 Parse
在这方面与 Backbone
在某种程度上有所不同...
像这样效果很好:
- 重新加载页面
- 转到视图(通过单击菜单)
- 单击
<i>
元素 --> 我的函数app.driveView.openMapViewInModal
运行 没问题 - 我可以多次打开模式(运行 功能),它有效。
但是,如果我单击菜单并转到另一个视图,然后返回到 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在这里是有区别的,不知道为什么。对此的任何评论和讨论表示赞赏。