2

我是 Backbone 的新手(仍然停留在 Ruby on Rails 模式中),并且对如何将集合作为属性/属性添加到模型中有点困惑(“属性”是正确的术语吗?)。

例如,我有一个名为 的模型current_plan,以及一个从服务器返回的名为 的变量json_dump,其中包含一个participants. 我希望它有一个名为的属性participants(它是参与者的集合),从 json_dump.participants 变量中填充它,并且能够使用类似 `current_plan.participants.where({first_name: "Dan"}) 的代码。

以下是我的初始化函数的一些片段:

var current_plan = new Plan();

current_plan.set({attribute: val} ...other attributes... );
current_plan.participants = new Backbone.Collection(json_dump.participants);

但这迫使我访问常规属性,例如:current_plan.attributes.attribute. 另外,我可以看到 中有正确的数据current_plan.attributes.participants.models,但我不知道如何在current_plan.

显然我不明白发生了什么,以及为什么涉及这么多额外的层。Backbone 文档似乎有点稀疏,我无法在 SO 或 Google 搜索中找到与我想要做的匹配的任何内容。如果还有其他问题或教程可以解释这一点,我将非常感谢有人指出我的方式。我还看到了Backbone Relational项目,这似乎是我需要的,但在我了解基础知识之前,我不希望向 Backbone 添加更多复杂性。

感谢您为帮助新的 Backbone 用户提供的任何帮助!

4

2 回答 2

3

我认为骨干框架没有官方方法来处理模型和集合之间的关系,并且我不使用骨干关系,但是我的骨干集合/模型中有多个关系。当我使用集合定义关系模型时,我将其用作模型对象的属性,而不是主干属性,因此:

var current_plan = new Backbone.Model(); //or backbone model extended 
current_plan.participants = new Backbone.Collection(json_dump.participants);

然后正如@andrew-hubbs 所说,您应该始终使用主干 api 来处理模型和集合属性,以使您的代码与主干版本保持一致。然后您可以像这样访问/设置模型属性

current_plan.get('property'); 
participant = current_plan.participants.get(1);
participant.get('property');
participant.set('name', 'bob');
于 2012-12-06T01:27:20.557 回答
2
var currentPlan = new Plan(); // Assuming Plan is a Backbone.Model
currentPlan.set("participants", new Backbone.Collection(json_dump.participants));
currentPlan.get("participants") instanceof Backbone.Collection
currentPlan.get("participants").at(0) instanceof Backbone.Model

get您应该始终通过/set方法访问 Backbone 模型上的属性哈希。如果这不起作用,那么您json_dump.participants的格式可能不正确。您可以在此处查看此类集合实例化的文档中的示例。

是的 Backbone.Relational 是一个基本上可以处理这个问题的项目。它允许您定义模型之间的关系。然后,它可以很容易地自动创建集合作为模型实例的属性。

于 2012-12-06T00:13:48.377 回答