如何使用model.fetch()
更新视图,即当我获取模型时,视图不应被销毁或重新呈现。它应该只是通过重置以前的模型将新模型更新到视图中。
this.model.fetch({success: this.render.bind(this)});
此代码重新渲染我的视图。如何使用新模型更新视图
感谢。
答案 0 :(得分:2)
根据您的需要,有多种方法可以更新视图。
如果视图相当简单,并且所需要的只是自动更新模型提取的视图,再次渲染视图是最简单的(模型上的Backbone&#s同步事件)可以使用,模型事件可以使用Marionette View的modelEvents哈希声明性地处理 - http://marionettejs.com/docs/marionette.view.html#viewmodelevents-and-viewcollectionevents)
modelEvents: {'sync': 'render'}
如果您在复杂视图中更改的模型属性很少,则可以通过侦听模型属性上的更改事件直接通过jquery更新dom元素:
modelEvents: {'change:name':'nameChanged'},
nameChanged: function(model, value){ this.$('#name').val(value);}
如果需要视图和模型之间的双向数据绑定,可以使用Backbone.stickit等框架来实现此目的 - https://github.com/NYTimes/backbone.stickit#usage
答案 1 :(得分:1)
每当您使用模型属性与模板建立双重绑定时,您的视图需要再次呈现以显示更改。因此,您无法避免渲染以显示模型的更新状态。
但我建议你做的是将你的观点划分为子视图。由于您使用的是牵线木偶,因此可以创建包含所有区域的主布局,并且可以为每个小区域定义视图。
例如,假设我有一个基本表格,其中包含我的姓名,当前时间和年龄。所有这些变量都存储在模型中。所以,你有一个场景,你的名字和年龄几乎没有变化,但当前时间每毫秒都在变化,导致你的整个视图重新渲染,这在性能和眼睛方面都很糟糕。
因此,为了解决上述情况,如果您可以为当前时间元素创建单独的视图,则可以单独渲染,而不需要一次又一次地渲染其他元素。如果您认为可以抽象其功能,则始终可以为单个按钮元素定义单独的视图。