一般问题我是否正在调用webservice来返回与我的某个Backbone模型相关的数据。从模型本身调用webservice是否更好,或者我应该在初始化时将WS的结果传递给模型。
我倾向于在我的模型中加入WS调用,但显然可能会遇到延迟问题。
那么处理这种数据检索的最佳位置在哪里?
答案 0 :(得分:4)
如果呈现HTML的页面已经知道将进入模型的数据,我绝对更愿意将数据直接呈现到模型构造函数中。这样的事情(假设Rails视图,但这只是为了说明):
我们假设您的控制器已将一些JSON数据呈现为@modelData
。
var modelData = <%= @modelData %>;
var model = new TheModel(modelData);
这样做可以让您立即获得数据,而无需再次回拨服务。我已经多次使用这种方法取得了很大的成功。
修改强>
为了对此进行扩展,这会导致对服务器的调用次数减少,因为后端正在呈现返回给客户端的HTML或JS中的数据。上面代码的结果(在视图渲染之后)可能是这样的:
var modelData = {id: 5, first: "Collin", last: "Estes" }; // populated in first server call
var model = new TheModel();
但是,如果您使用另一种方式,则可以对服务器进行两次调用:
var model = new TheModel({id: 5});
model.fetch(); // results in second server call
第一次调用服务器是返回代码的服务器。第二种情况发生在你调用fetch时。
如果你问别的话,我道歉。您可以通过“处理这些呼叫的最佳位置在哪里”来澄清您的意思。
答案 1 :(得分:1)
执行此操作的正确方法是首先创建模型,然后使用model.fetch
来提取数据。这样,所有ajax逻辑都合并到Backbone.sync
。
如果您在呈现HTML时可以随时获得数据,我会将其放入缓存中,例如sessionStorage
,并使您的同步代码能够读取/写入缓存。这样,如果您需要将Web服务调用移出HTML呈现(例如,如果您使用的是应用程序缓存),则无需进行重大重构。