javascript - backbone.js 和不在模型中的状态

标签 javascript backbone.js

在 Backbone 的数据驱动范例中,主干 View /路由器应该订阅模型更改并根据模型更改事件采取行动。遵循这个原则,应用程序的 View /路由器可以相互隔离,这很棒。

但是,应用程序状态中有很多变化并未保留在模型中。例如,在待办事项应用程序中,可能有一些按钮可让您查看“已完成”、“未完成”或“全部”任务。这是模型中未保留的应用程序状态。请注意,任何任务的完成状态都是持久的,但 View 中的当前过滤器是 transient 。

处理这种应用程序状态的好方法是什么?使用简单的非 Backbone 状态意味着 View /路由器无法监听此状态的变化,因此难以在数据驱动范例中进行编码。

最佳答案

您的按钮过滤器示例可以使用模型事件正确解决。

我想您的按钮处理程序可以访问任务集合。然后过滤集合并在选定的模型上触发事件,例如:

model.trigger( "filter:selected" )

model.trigger( "filter:un-selected" )

ModelView 可以监听其模型上的这些事件并采取相应的行动。

这是遵循您的要求,即尊重不使用或“不持久的属性”,如选定,但即使使用特殊属性,我也没有任何创伤如果他们不应该坚持下去。因此,我还建议修改模型的 selected 属性来表示不稳定状态。

因此,在您的按钮处理程序中过滤集合并修改模型中的selected属性是我的首选解决方案:

model.set( "selected", true )

您始终可以覆盖Model.toJSON()以在同步之前进行清理,或者仅保留此特殊属性以传输到您的服务器并在那里被忽视。

关于javascript - backbone.js 和不在模型中的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077691/

相关文章:

javascript - 使用meta.tdAttr的网格列渲染器工具提示

javascript - 在 javascript 中拦截的原型(prototype)

javascript - 未定义|0|引用错误 : Strict mode forbids implicit creation of global property 'csrf_token'

javascript - 使用 coffeescript 生成的 js 未捕获的类型错误

javascript - A-Frame - 使用自定义 ('a-sound' ) 源播放/暂停声音

javascript - JQuery 在 JSFiddle 上工作,但在我的网站上不工作。

javascript - 添加 MultiPolygon 几何体时出现语法错误

c++ - 完全与 View 层无关的应用程序架构

javascript - 在 Backbone js 中抽象逻辑

symfony - 使用 JMSSerializer 反序列化关联的持久化 Doctrine 实体