你是obj模型應該是外化的。
App.module("Entities",function(Entities,App,Backbone,Marionette,$,_){
"use strict";
//these are locally scoped, so they aren't accessable by the your app
var Obj = Backbone.Model.extend({
urlRoot:'api/obj',
});
var Data = {};
var API = {
//wrap request in deferred
getObjById : function(id, reset){
var deferred = $.Deferred();
//returned cached data if we don't request refreshed data
reset = reset || false;
if (Data[id] && !reset) {
return Data;
}
this._getObj(id, function(loadedObj) {
//cache object
Data[loadedObj.id] = loadedObj
deferred.resolve(loadedObj);
});
return deferred.promise();
},
_getObj: function(id, callback) {
var obj = new Obj({id:id});
obj.fetch({success:callback});
},
};
//Interface for mucking with Obj model
App.reqres.setHandler("obj:getObj", function(id) {
return API.getObjById(id);
});
});
你可以像這樣得到一個obj。如果復位不傳遞,這將是緩存的版本(所有子模塊可以指代相同的OBJ只是通過傳遞ID或W/E的標準是用於加載):
$.when(App.request('obj:getObj', 123)).done(function(loadedObj) {
//show view, or do whatever
);
或獲得新鮮數據:
$.when(App.request('obj:getObj', 123, true)).done(function(loadedObj) {
//show view, or do whatever
);
這些只是如何獲取數據的示例。您可以擴展API並公佈用於更新數據的新處理程序。您可以讓每個子模塊的控制器監聽obj(所有人都聽同樣的,緩存的obj模型),或者每次需要時請求最新的obj模型。如果您的緩存數據反映最近的更改,這將是服務器的往返行程。但是,你必須擔心保持同步。
希望這會有所幫助