骨干更新视图的参考,总是基于状态变化或作为事件处理程序的副作用?

时间:2013-11-29 19:15:36

标签: backbone.js

我承认这是一个非常神秘的问题。

我正在寻找基于GUI事件更新视图的参考/最佳实践。 基本上我看到了两种不同的方法:

  1. 每次观看改变都是对模特改变的反应
    1. 桂事件
    2. viewhandler(自定义或双向绑定库)
      • 根据视图更新模型
    3. 视图在已更新的MOdel上定义了listenTo,将被调用
    4. 做我们想要的任何DOM更改
  2. 直接在viewhandler中更改DOM
    1. 桂事件
    2. viewhandler(自定义或双向绑定库)
      • 根据视图更新模型
      • 做我们想要的任何DOM更改
    3. 视图在已更新的MOdel上定义了listenTo,将被调用
  3. 第一种方法对我来说似乎最干净:它可以在模型上使用验证规则,然后更改DOM并且流程感觉更好。但是,我找不到任何好的参考来支持这一点。这里通常被认为是最佳做法?

1 个答案:

答案 0 :(得分:0)

我不知道关于该主题的整体互联网协议是什么,但是在具有复杂视图的相当大的Backbone应用程序上工作,第一种方法已被证明是最易维护的。

一种看待它的方法是,正如您所知,Backbone的视图和Backbone的路由器有点共享标准MVC中的实际控制器(比如Rails)的工作负载。这意味着在视图中,您通常会有逻辑将GUI事件(单击X)转换为模型更改(执行Y)以及将模型更改(Y之后的新状态)转换为DOM更改的逻辑。这并不意味着逻辑需要在同一个地方,这是两个不同的事情。您的模型可能在多个视图之间共享,无论更改源自何处,您都需要View进行响应。您也可以等待服务器回答任何问题,因此,DOM更新无论如何都会在回调中。

我最近经常使用的模式是使用_renderUpdating()更新DOM以让用户知道他的操作已经考虑到了(在触发更改的任何地方附近添加一个微调器),但是我让事件在服务器返回新模型后进行实际的重新渲染。

在简单的情况下,没有任何东西阻止你使用第二种方法,但随着你的应用程序的增长,你会非常高兴不仅仅有一个渲染()可以删除所有内容(包括子视图)而你我会看到在视图之间有一个干净的中断 - > model(控制器的作用)和模型 - >观点以提供更大的灵活性。