我可以在Ember中使用每种模型特定的数据吗?

时间:2013-07-26 16:09:41

标签: ember.js

好的,所以,在没有给出太多细节的情况下,我正在尝试使用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中?它应该在角色模型中吗?

我希望我在这里清楚。 :)

感谢您的任何意见!

1 个答案:

答案 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>