Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js EmberJS数据-引用id并添加其他属性_Ember.js_Ember Data - Fatal编程技术网

Ember.js EmberJS数据-引用id并添加其他属性

Ember.js EmberJS数据-引用id并添加其他属性,ember.js,ember-data,Ember.js,Ember Data,我使用的是Ember版本1.0.0和Ember数据v1.0.0-beta.3。问题是,在向关系添加一些附加属性时,我似乎无法获得对模型的有效引用。我将举一个例子来说明我想要实现的目标,因为我发现很难解释 首先,我的模型是这样连接的: App.Employee = DS.Model.extend({ firstName: DS.attr("string"), lastName: DS.attr("string"), languages: DS.hasMany("language", {

我使用的是Ember版本1.0.0和Ember数据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")
});
目前,我正在使用fixture,但稍后我计划使用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属性替换为:

languages: [
  {
    id: 1,
    knowledge: 3
  },
  {
    id: 2,
    knowledge: 2
  }
]
我添加了一个关于语言的额外知识字段,指定的id必须引用语言模型中的id。运行此命令会导致TypeError(无法调用undefined的方法“toString”)


那么我该如何建模/修复这个问题呢?这可以通过使用多态关系或序列化程序来实现吗,就像我遇到的这些术语一样?我已经找了很长时间了,这个(新的)框架让我越来越困惑。

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

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")
});

这是我的备份计划,所以我想没有比这个解决方案更高级的了?无论如何,谢谢你的回复,但为了完整起见,应用程序不应该。语言“有很多”语言技能吗?你是对的,我修复了代码。关于“更高级”的解决方案:问题是关系在设计上没有属性。每当你在这个需求上遇到困难时,一个映射表就是答案。特别是当您需要在关系数据库上建模数据时。