0

我将 Ember 1.0.0 版与 Ember Data v1.0.0-beta.3 结合使用。问题是,在向关系添加一些附加属性时,我似乎无法获得对模型的有效引用。我将举一个例子来说明我想要完成的事情,因为我觉得很难解释。

首先,我的模型是这样连接的:

App.Employee = DS.Model.extend({
  firstName: DS.attr("string"),
  lastName: DS.attr("string"),
  languages: DS.hasMany("language", { async: true })
});

App.Language = DS.Model.extend({
  name: DS.attr("string"),
  employee: DS.belongsTo("employee")
});

目前,我正在使用固定装置,但稍后我打算使用 RESTAdapter。这就是我的 JSON 的样子:

App.Employee.FIXTURES = [
  {
    id: 1,
    firstName: "Alpha",
    lastName: "Dog",
    languages: [1, 2]
  },

  {
    id: 2,
    firstName: "Bravo",
    lastName: "Cat",
    languages: [3]
  }
];

App.Language.FIXTURES = [
  {
    id: 1,
    name: "German"
  },
  {
    id: 2,
    name: "Spanish"
  },
  {
    id: 3,
    name: "Russian"
  }
];

现在这可行,但我想做的是向 Employee 模型中的语言键添加其他信息。像这样,将语言属性替换为:

languages: [
  {
    id: 1,
    knowledge: 3
  },
  {
    id: 2,
    knowledge: 2
  }
]

我添加了一个关于语言的额外知识字段,指定的 id 必须引用 Language 模型中的 id。运行它会给我一个 TypeError(无法调用未定义的方法 'toString')。

那么我该如何建模/解决这个问题?当我遇到这些术语时,这可以使用多态关系或序列化程序来完成吗?我已经找了很长时间了,这个(新的)框架让我越来越困惑。

4

1 回答 1

0

看起来您需要一个员工和语言之间的映射表(模型),您可以在其中存储知识。像这样:

App.Employee = DS.Model.extend({
  firstName: DS.attr("string"),
  lastName: DS.attr("string"),
  languageSkills: DS.hasMany("languageSkill", { async: true })
});

App.LanguageSkill = DS.Model.extend({
  employee: DS.belongsTo("employee"),
  language: DS.belongsTo("language"),
  knowledge: : DS.attr('number'),
});

App.Language = DS.Model.extend({
  name: DS.attr("string"),
  languageSkills: DS.hasMany("languageSkill")
});
于 2013-10-04T15:50:54.117 回答