假设有一个 bookList 视图(以书籍为模型)和一些书籍视图(以书籍为模型)
如果我想在每个书本视图中运行一个函数。至少有两种方法:
在 bookList 视图中维护一个包含所有书籍视图的数组,而不是直接运行该函数
在书籍模型中的每个书籍模型上触发自定义事件以使视图运行该功能。
哪一个更好?
假设有一个 bookList 视图(以书籍为模型)和一些书籍视图(以书籍为模型)
如果我想在每个书本视图中运行一个函数。至少有两种方法:
在 bookList 视图中维护一个包含所有书籍视图的数组,而不是直接运行该函数
在书籍模型中的每个书籍模型上触发自定义事件以使视图运行该功能。
哪一个更好?
我真的认为你应该考虑更多关于你的应用程序的事情,你将被你的应用程序概念的自然流程引导到决定。
所以根据你的方法:
如果您没有足够的这些 bookView,它可以是一个解决方案。实际上,您应该在这里问自己的问题是,您真的只需要该数组来实现该功能,还是可以将其用于其他用途。
这将为每个 bookView 添加一些相同的事件侦听器和回调(函数本身)。这将要求每个 bookView 在您的浏览器中共享内存,以获得相同的信息。
我也在考虑第三种方法:
所以你可以设法做到这一点,并使用你想要的函数在触发器上设置一个参数,所以基本上你的书 View 中的代码将类似于:
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 时,您应该关闭 eventlistener :bookList.off('doThisFunction', cb)
从您的 book View 中,因为您的 bookList 事件聚合器中有一个垃圾。