问题:文档很少,而且我是一个菜鸟 - 任何人都可以确认正确(假设有一种)方法将Backbone.Views绑定到Backbone的实例。 RelationalModel(来自backbone-relational.js)用于更新/呈现到dom?基于Backbone中正常的模型/视图绑定,我尝试了一些不同的方法,但收效甚微。
背景故事(/更多信息): 我正在学习Backbone.js的绳索,并且在过去的一周里不得不接受很多。如果我遗漏了一些明显的东西(极有可能 - 包括以下“处理我问题的”正确方法“),请打电话给我。
我正在处理mongodb支持的REST接口(我没有完全控制 - 或者我将在服务器端重新构建行为),它充分利用了嵌套字典,所以我一直在阅读如何在Backbone中最好地表示它(虽然没有打破Backbone提供的伟大的save()+服务器同步)。
我见过两个选项:backbone-relational和ligament.js。
我已经开始使用backbone-relational.js,并且已经为树中的各种字典创建了RelationalModel(骨干关系代替Backbone的标准模型),这些字典由REST接口传回。定义它们之间的关系,并且控制台记录每个模型中的JSON(在它们各自的初始化函数中)显示它们都在整个集合级别的fetch()命令上正确地从服务器上调用/加载。 / p>
所以,这一切都很棒。
问题:我对每个模型(以及应该在dom上渲染模板的绑定函数)都有“监听”视图,并且它们根本不会“触发”(更不用说渲染...)。主视图触发fetch(),没有问题,加载“顶级”模型并在dom上呈现它 - 但代表“顶级”模型中的“外键”模型的视图从不这样做(即使数据肯定会被加载到每个模型中,如上面提到的每个模型的控制台登录所示。)
非常感谢任何见解。
直接回复下面的Raynos回复(感谢Raynos!): 如果我使用服务器上的UpperLevelModels(UpperLevelCollection url)/(UpperLevelModel id)中的UpperLevelModels定义了UpperLevelCollection的基本URL,那么我如何将这些LowerLevelCollections映射到服务器端的每个UpperLevelModel的一个JSON转储中的字典键?换句话说,使用模型中的集合可以正确地处理来自服务器的数据转储(显然非常简化,但会遇到问题)并正确地保存/更新/同步它吗?
[{
"some_key": "Some string",
"labels": ["A","List","Of","Strings"],
"content": [{
"id": "12345"
"another_key": "Some string",
"list": ["A","list","of","strings"],
},{
"id": "67890"
"another_key": "Some string",
"list": ["A","list","of","strings"],
}],
}]
答案 0 :(得分:2)
一般来说,对于嵌套词典,我采用以下方法
var UpperLevelCollection = Backbone.Collection.extend({
model: UpperLevelModel
}),
UpperLevelModel = Backbone.model.extend({
initialize: function() {
this.nested = new LowerLevelCollection;
}
}),
LowerLevelCollection = Backbone.Collection.extend({
model: LowerLevelModel
}),
LowerLevelModel = Backbone.Model.extend({});
将这些集合完全嵌入模型中。
答案 1 :(得分:1)
问题可能是当您将新数据加载到ParentModel中时,您的子集合AFAIK实际上并未被提取,它被擦除并被新集合替换(请参阅backbone-relational.js中第584行的Backbone.HasMany.OnChange) )。因此,您对子集合的绑定已经消失。
在我看来,这是与骨干关系的弱点。此行为应该是可配置的,可以选择使用较慢的查找和更新方法而不是擦除和替换。