好的,所以,在没有给出太多细节的情况下,我正在尝试使用ember.js构建一个RPG角色表作为我的第一个项目(不过,我已经完成了TodoMVC教程,以及Tom Dale的视频指南,以及Peepcode视频。但是,我可能已经丢失/忘记了点点滴滴,所以请原谅我,如果这个问题被覆盖了。)
基本上,只跟踪角色统计和诸如此类的东西。大多数统计数据非常简单,因为它们只是字符串/数字。什么让我感到沮丧的是当我遇到角色盘点,技能等等时。
例如,在尝试设置我的数据模型时,我已经将其用于简单属性:
App.Character = DS.Model.extend({
species: DS.attr('string'),
career: DS.attr('string'),
gender: DS.attr('string'),
age: DS.attr('number'),
height: DS.attr('number'),
hair: DS.attr('string'),
notableFeatures: DS.attr('string'),
(etc., etc.)
});
现在,对于其他属性,比如说,一个astrogation技能,我既有技能名称,也有角色在该技能中的等级。
一种选择就是变得懒惰,并按如下方式设置每项技能:
skillAstrogation: DS.attr('number')
但是,我并不觉得这完全符合事物的“精神”,如果有必要,我会更难以在以后添加/删除技能。此外,我希望在某些时候,用户能够添加自己的技能。
因此,在询问reddit并进行更多研究后,看起来我应该使用多对多关系。也就是说,为“技能”设置一个单独的模型,并给每个人提供一个名字,等级等等(还有一两个我想要的领域)。
这样的事情:
App.Character = DS.Model.extend({
...
skills: DS.hasMany("App.Skill")
});
App.Skill = DS.Model.extend({
title: DS.attr('string'),
rank: DS.attr('number'),
characters: DS.hasMany("App.Character")
});
然而,我不完全清楚的是,如果有意义的话,我会如何为每个技能的每个角色设定等级。
也许“排名”不应该在App.Skill中?它应该在角色模型中吗?
我希望我在这里清楚。 :)
感谢您的任何意见!
答案 0 :(得分:0)
正如我所理解的那样,你想要的实际上并不是多对多,而是多对一。每个技能等级只对应一个角色对吗?现在您可能会觉得这会添加大量重复内容,因为每次都会复制标题,在这种情况下,您实际上会喜欢3个模型。
这样的事情:
App.Character = DS.Model.extend({
...
skills: DS.hasMany("App.Linkage")
});
App.Linkage = DS.Model.extend({
rank: DS.attr('number'),
character: DS.belongsTo("App.Character")
skill: DS.belongsTo("App.Skill")
});
App.Skill = DS.Model.extend({
title: DS.attr('string'),
...
});
现在要检索数据,您可以执行以下操作:
路线:
model: function () {
return App.Character.find();
}
模板:
<ul>
{{#each character in controller}}
<li>{{character.name}} -
{{#each item in character.skills }}
{{item.skill.skill}}: {{item.rank}},
{{/each}}
</li>
{{/each}}
</ul>