2013-10-04 3 views
0

Я использую Ember версии 1.0.0 в сочетании с Ember Data v1.0.0-beta.3. Проблема в том, что я не могу получить действительную ссылку на модель при добавлении некоторых дополнительных свойств в отношение. Я приведу пример, который показывает, чего я хочу достичь, поскольку мне трудно объяснить.Данные EmberJS - Ссылка на id и добавление дополнительных свойств

Во-первых, мои модели соединены таким образом:

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 
    } 
] 

добавить дополнительное поле знаний о языке, и идентификатор, указанный должен обратиться к идентификатору в модели языка. Выполнение этого дает мне TypeError (не может вызвать метод «toString» неопределенного).

Итак, как мне это сделать/исправить? Может ли это быть выполнено с использованием полиморфных отношений или сериализаторов, поскольку я столкнулся с этими терминами? Я давно искал, и эта (новая) структура меня все больше запутывает.

ответ

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

Это был мой план резервного копирования, поэтому я думаю, что нет ничего более «продвинутого», чем это решение? В любом случае, спасибо за ваш ответ, но только чтобы быть полным, не должен App.Language 'hasMany' LanguageSkill? – Sander

+0

Вы правы, я исправил код. Что касается «более продвинутого» решения: проблема в том, что отношения не имеют свойств по дизайну. Всякий раз, когда вы натыкаетесь на это требование, таблицей сопоставления является ответ. Особенно, когда вам нужно моделировать данные в реляционной БД. –

Смежные вопросы