在 childView 中直接运行函数 VS 在其模型上触发事件 [ 在 BackBone 中]

run function in childView directly VS trigger a event on it's model [ In BackBone ]

本文关键字:事件 BackBone childView 运行 VS 函数 模型      更新时间:2023-09-26

假设有一个书列表视图(以书籍为模型(和一些书籍视图(以书籍为模型(

如果我想在每个书籍视图中运行一个函数。 至少有两种方法:

  1. 维护一个包含书籍列表视图中所有书籍视图的数组,而不是直接运行该函数

  2. 在书籍模型
  3. 中的每个书籍模型上触发自定义事件,以使视图运行函数。

哪一个更好?

我真的认为你应该考虑更多关于你的应用程序的事情,你将被你的应用程序概念的自然流程引导到决策。

所以根据你的方法:

维护带有视图的数组

如果你没有很多这样的书视图,这可能是一个解决方案。事实上,你应该在这里问自己的问题是,你真的只需要这个数组来用于那个函数,还是可以用于其他东西。

在每个图书模型上触发自定义事件

这将添加到每本书查看一些相同的事件侦听器和回调(函数本身(。这将需要每本书查看浏览器中的内存共享,以获取相同的信息。

我还在考虑第三种方法:

在图书列表视图中触发一个自定义事件,该事件由图书视图侦听

所以

你可以设法做到这一点,并使用你想要的函数在触发器上设置一个参数,所以基本上你的书中的代码 视图 将是这样的:

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 事件聚合器中将有一个垃圾。