gpt4 book ai didi

javascript - 保持不同 Backbone 模型同步的方法

转载 作者:行者123 更新时间:2023-11-28 01:06:57 24 4
gpt4 key购买 nike

我尝试在下图中描述我的问题。

enter image description here

当页面加载时,一个 JavaScript 对象被解析并成为我的 Backbone 模型,称为 obj 模型。这个对象模型被传递到许多不同的独立和模块化子模块,这些子模块以不同的方式使用数据。

除了当我处理集合时,一切都很好。为了让用户能够管理“照片”和“评论”,我需要为它们创建一个单独的集合/模型数据结构。

我应该如何将更改同步回我的“obj 模型”?

class Obj extends Backbone.DeepModel

class Comment extends Backbone.DeepModel

class CommentCollection extends Backbone.Collection
model: Comment

class Photo extends Backbone.DeepModel

class PhotoCollection extends Backbone.Collection
model: Photo

最佳答案

你的 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 。如果未传入重置,则它将是缓存版本(所有子模块都可以通过传入 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 并公开用于更新数据的新处理程序。您可以让每个子模块的 Controller 监听 obj(通过所有监听相同的缓存 obj 模型),或者只是在每次需要时请求最新的 obj 模型。如果您的缓存数据反射(reflect)了最新的更改,这将是一次到服务器的往返。但随后您就必须担心如何保持同步。

希望这有帮助

关于javascript - 保持不同 Backbone 模型同步的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24956038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com