我正在开发一个相对较大的应用程序,就像某种应用程序集合。
我的所有应用都有一个自举视图,可以加载基本布局和嵌套视图。
我现在开始为视图实现单例模式:
var SomeView = Backbone.View.extend({});
if (SomeView._instance) return SomeView._instance;
SomeView._instance = new SomeView();
return SomeView._instance;
现在我提到当我在不同的应用程序(视图)之间切换时,事件系统就会崩溃。这实际上是相当逻辑的,最后我们从文档中删除了视图。但是,我总是对新的观点建立一些抵制。这是非常无效的:一切都必须重新加载(数据),并重建。
那么有没有办法将事件重新绑定到缓存的视图,或者这是一个完整的想法废话,我应该接受视图必须重建?
此致,Bodo
更新
define(['jquery', 'underscore', 'backbone', 'views/settings/profile'], function($, _, Backbone, ProfileSettingsView) {
var ContentView = Backbone.View.extend({
tagName: "div",
className: "content well",
initialize: function() {
this.on('change:section', this.change, this);
this.views = {};
this.views.profile = new ProfileSettingsView();
},
render: function() {
this.$el.empty();
return this;
},
events: {
"click": "click"
},
// the router triggers this one here
change: function(query) {
console.log(query);
// if I uncomment this then nothing is rendered at all
//this.$el.detach();
var el;
if (query === 'profile') {
el = this.views.profile.render().el;
} else {
this.$el.empty();
}
if (el) {
this.$el.empty().append(el);
}
},
click: function(e) {
console.log('clicked, content should disapear');
}
});
if (ContentView._instance) return ContentView._instance;
ContentView._instance = new ContentView();
return ContentView._instance;
});
我对如何使用jquery的分离()感到有点困惑。 我查看了官方文档中的演示,发现在jquery对象上调用.detach()是不够的。 .detach返回一个看起来像jquery的新对象和包含绑定的事件。关于这一点的困难在于我必须在某处保存detach()的这种回报,现在我必须从它来的人那里获得。现在我没有任何透视。我现在将使用detach()搜索一些Backbone.View示例,但我认为这是特定的......
UPDATE2:
是的!我找到了一个解决方法:而不是保存事件,然后将其重新插入DOM。我们可以调用" this.delegateEvents()"重新绑定所有事件。这真的只是一种解决方法,如果有人能给我一个例子,我会很高兴:)
答案 0 :(得分:2)
就个人而言,我更喜欢重建我的观点。
但是,我知道很多人喜欢重复使用它们。在这种情况下,请按照Tim Branyen撰写的博客文章中的说明进行操作:http://tbranyen.com/post/missing-jquery-events-while-rendering