在 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/