在 childView 中直接运行函数 VS 在其模型上触发事件 [ 在 BackBone 中]
run function in childView directly VS trigger a event on it's model [ In BackBone ]
假设有一个书列表视图(以书籍为模型(和一些书籍视图(以书籍为模型(
如果我想在每个书籍视图中运行一个函数。 至少有两种方法:
-
维护一个包含书籍列表视图中所有书籍视图的数组,而不是直接运行该函数
在书籍模型 中的每个书籍模型上触发自定义事件,以使视图运行函数。
哪一个更好?
我真的认为你应该考虑更多关于你的应用程序的事情,你将被你的应用程序概念的自然流程引导到决策。
所以根据你的方法:
维护带有视图的数组
如果你没有很多这样的书视图,这可能是一个解决方案。事实上,你应该在这里问自己的问题是,你真的只需要这个数组来用于那个函数,还是可以用于其他东西。
在每个图书模型上触发自定义事件
这将添加到每本书查看一些相同的事件侦听器和回调(函数本身(。这将需要每本书查看浏览器中的内存共享,以获取相同的信息。
我还在考虑第三种方法:
在图书列表视图中触发一个自定义事件,该事件由图书视图侦听
所以你可以设法做到这一点,并使用你想要的函数在触发器上设置一个参数,所以基本上你的书中的代码 视图 将是这样的:
var cb = function(theFn) {
theFn.apply(this); // here we are setting theFn this to this view
}
bookList.on('doThisFunction', cb, this);
当你触发时,你可以做一些类似的事情
theFn = function() {
this.render();
}
bookList.trigger('doThisFunction', theFn);
请注意,当您不再需要 bookView 时,您应该关闭事件侦听器 : bookList.off('doThisFunction', cb)
从您的书视图 ,因为您的 bookList 事件聚合器中将有一个垃圾。
相关文章:
- '单击'事件在Backbone中消失.使用流沙后查看
- Backbone fetch中的Ajax在fetch调用退出后完成,因此fetch调用中没有成功/失败事件
- 将Backbone.View重新注入DOM,保留事件而不是创建新事件
- Backbone.js ModelBinder将默认事件更改为keyup
- 我应该如何在backbone.mariente中测试/监视此类事件
- 在 Backbone - 在 CoffeeScript 中触发和侦听不同类的事件
- 如何将参数传递给backbone.js中事件对象中绑定的函数
- 将Backbone事件与HTML5视频播放事件结合使用
- 单击文档时的Backbone JS事件
- Can-Backbone视图在一个html元素上有两个不同的事件
- Backbone.js事件未启动
- JS/Backbone/Chaplin 事件处理程序未触发
- 访问谷歌地图事件中的Backbone.View功能
- Backbone.view.extend:如何声明事件
- 点击事件未启动!(backbone.js)
- 在Backbone.js视图中拖动gabilly.js事件
- 在 Backbone 中,为什么我在执行 fetch() 时无法触发“重置”事件
- 当侦听器已附加到 Backbone.Model 事件时获得通知
- 如何连接来自不同文件的事件?Javascript/Backbone
- 简单事件backbone.js错误