我是Backbone的新手(仍然停留在RubyonRails模式中),对于如何将Collection作为属性/属性添加到Model中有点困惑("attribute"是正确的术语吗?)。
例如,我有一个名为current_plan
的模型,以及一个从包含participants
数组的服务器返回的名为json_dump
的变量。我希望它有一个名为participants
的属性(这是一个参与者的集合),从json_dump.enventions变量填充它,并能够使用类似`current_plan.enventions.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
上使用任何Collection方法。
很明显,我不明白发生了什么,也不明白为什么会有这么多额外的层。Backbone文档似乎有点稀疏,我在SO或谷歌搜索中找不到任何与我想做的事情相匹配的内容。如果有其他问题或教程可以解释这一点,我将非常感谢有人向我指出这一点。我还看到了Backbone Relational项目,它似乎正是我所需要的,但在我了解基础知识之前,我不想给Backbone增加更多的复杂性。
感谢您为帮助新的骨干用户提供的任何帮助!
我认为主干框架没有正式的方式来处理模型和集合之间的关系,我也不使用主干关系,但我的主干集合/模型中有多个关系。当我定义一个与集合的关系模型时,我将其用作模型对象的属性,而不是主干属性,所以:
var current_plan = new Backbone.Model(); //or backbone model extended
current_plan.participants = new Backbone.Collection(json_dump.participants);
然后,正如@andrew-hbbs所说,您应该始终使用主干api来处理模型和集合属性,以使代码与主干版本保持一致。然后你可以访问/设置像这个这样的模型属性
current_plan.get('property');
participant = current_plan.participants.get(1);
participant.get('property');
participant.set('name', 'bob');
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
方法访问主干模型上的属性哈希。如果这不起作用,那么json_dump.participants
的格式可能不正确。您可以在这里看到这种集合实例化的文档中的一个示例。
是的骨干。Relational是一个基本上正是要处理这一问题的项目。它允许您定义模型之间的关系。这样就可以很容易地将集合自动创建为模型实例上的属性。