【问题标题】:Two views one model, how to prevent view from unnessary update/rerender两个视图一个模型,如何防止视图不必要的更新/重新渲染
【发布时间】:2017-05-02 00:52:59
【问题描述】:

上下文: 两个视图 A 和 B 连接到同一个模型:

  • 两者都可以改变模型状态
  • 两者都需要在模型上更新其 UI 改变

问题: 如何防止视图 A 在 A 触发模型更改时重新渲染自身,同时在 B 更改模型时仍然允许 A 更新?

暂定解决方案: 传递对调度事件的视图的引用,类似于 event.target

PS:我们没有使用 React.js 或不可变数据。因此,总是重新渲染或将模型与视图状态进行比较可能代价高昂且容易出错。我们试图通过使用包含整个应用程序状态的单个模型来遵循 redux 模式。

【问题讨论】:

    标签: javascript model-view-controller backbone.js redux


    【解决方案1】:

    我不确定骨干网是否鼓励这样做。听起来视图 A 中发生了一些事情,这将导致视图 A 和视图 B 的重新渲染,但是您在不同的位置处理视图 A 的重新渲染,因此不希望它在模型更改事件。

    如果是这种情况,我认为您需要视图 A 来监听模型较小部分的更改,例如(来自 http://backbonejs.org/#Events

    book.on({
      "change:author": authorPane.update,
      "change:title change:subtitle": titleView.update,
      "destroy": bookView.remove
    });
    

    或者,您可以在更改模型时使用 {silent:true} 选项使更改事件静音,然后直接在视图 B 上调用渲染。不过我认为这不是一个好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      相关资源
      最近更新 更多