如何使用和访问 Backbone.js 集合作为模型中的属性/属性?



我是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是一个基本上正是要处理这一问题的项目。它允许您定义模型之间的关系。这样就可以很容易地将集合自动创建为模型实例上的属性。

相关内容

  • 没有找到相关文章

最新更新