在主干应用程序中,关于何时获取模型的最佳实践是什么?我可以看到以下可能性。
- View 调用模型 fetch 方法
- 其他一些 JavaScript 代码调用 fetch 模型?如果是这样,该代码将在何时以及采用何种结构?这是 Backbone 中缺少的控制器概念吗?
在主干应用程序中,关于何时获取模型的最佳实践是什么?我可以看到以下可能性。
一些最佳实践:
因此,当从服务器为用户提供正确的页面时,模型和集合应该已经到位(来自主干.js 文档的好例子)
var ExampleCollection = new Backbone.Collection();
ExampleCollection.reset(<%= @your_collection_data.to_json() %>); // Or whatever your server-side language requires you to do, this is a ruby example
在您的应用程序初始化时不需要的模型和集合可以随时获取,但我认为这样做的合乎逻辑的时间是用户表达使用这些模型的意图时。例如,用户按下按钮打开需要一些模型/集合的视图 -> 获取该集合,用户想要清除模型中未保存的更改 -> 从服务器获取该模型以获取模型的最后保存状态,等等向前。通常,获取必然发生的地方是“拥有”模型/集合的视图,因为它将用户的操作传递给模型并将模型的状态显示给用户。
但正如人们所说,Backbone.js 对何时获取模型或集合并不严格。它可以在应用程序的任何地方完成,只需确保仅在必要时执行。
希望这可以帮助!
如果您想成为标准,您的视图必须在初始化时渲染一次并监听模型的更改事件,并在每次模型更改时重新渲染视图,仅此而已。(关于 fetch 完成后 View 需要做什么)
如果您遵循我所说的标准,则调用 model.fetch() 时,无论在哪里调用 fetch,您的视图都会被更新。
有些人可能在视图中有一个名为 load 的模块,其中执行如下操作:
load : function(){
this.model.fetch();
}
其他人可以进行外部 fetch 调用,如下所示:
var myModel = new YourModel();
var myView = new SomeView( {model : model} );
//Probably you could render with the default data in the while model is fetched
myView.render();
model.fetch();