我是Backbone的新手(仍然坚持使用Ruby on Rails模式)并且对于如何将一个Collection作为属性/属性添加到Model中感到有点困惑(是"属性"正确的用语?)。
例如,我有一个名为current_plan
的模型,以及一个名为json_dump
的变量,该变量是从包含participants
数组的服务器返回的。我希望它有一个名为participants
的属性(参与者的集合),从json_dump.participants变量填充它,并且能够使用类似`current_plan.participants.where({first_name:&# 34;丹"})。
以下是我的初始化函数的一些片段:
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用户!
答案 0 :(得分: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');
答案 1 :(得分: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
可能无法正确格式化。您可以在此类collection instantiation here的文档中看到一个示例。
是Backbone.Relational是一个基本上处理这个问题的项目。它允许您定义模型之间的关系。然后,它可以很容易地自动创建集合作为模型实例的属性。