Backbone-relational.js + Backbone.View(s)

时间:2011-06-21 22:23:35

标签: javascript backbone.js backbone-relational

问题:文档很少,而且我是一个菜鸟 - 任何人都可以确认正确(假设有一种)方法将Backbone.Views绑定到Backbone的实例。 RelationalModel(来自backbone-relational.js)用于更新/呈现到dom?基于Backbone中正常的模型/视图绑定,我尝试了一些不同的方法,但收效甚微。

背景故事(/更多信息): 我正在学习Backbone.js的绳索,并且在过去的一周里不得不接受很多。如果我遗漏了一些明显的东西(极有可能 - 包括以下“处理我问题的”正确方法“),请打电话给我。

我正在处理mongodb支持的REST接口(我没有完全控制 - 或者我将在服务器端重新构建行为),它充分利用了嵌套字典,所以我一直在阅读如何在Backbone中最好地表示它(虽然没有打破Backbone提供的伟大的save()+服务器同步)。

我见过两个选项:backbone-relationalligament.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"],
    }],
}]

2 个答案:

答案 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) )。因此,您对子集合的绑定已经消失。

在我看来,这是与骨干关系的弱点。此行为应该是可配置的,可以选择使用较慢的查找和更新方法而不是擦除和替换。