Почему мне нужно повторно открыть класс, чтобы установить URL-адрес для модели Ember-данных?

Я обнаружил, что если я попытаюсь включить URL-адрес в исходное определение модели ember-data, он взорвется в моем адаптере REST, но если я просто «повторно открою класс», все в порядке.

Какова техническая причина этого? (ниже рабочий пример)

CodeCamp.Speaker = DS.Model.extend({
    id: DS.attr('number'),
    name: DS.attr('string'),
    session: DS.belongsTo('CodeCamp.Session')
});

CodeCamp.Speaker.reopenClass({
    url: 'sessions/%@/speakers'
});

person Toran Billups    schedule 01.10.2012    source источник


Ответы (2)


Вызов extend для объекта устанавливает атрибуты экземпляра, тогда как reopenClass устанавливает атрибуты класса.

Атрибут url является атрибутом уровня класса,

Ember.get(CodeCamp.Speaker, 'url')

в отличие от:

speaker = CodeCamp.Speaker.createObject()
Ember.get(speaker, 'name')
person Bradley Priest    schedule 01.10.2012
comment
Потрясающие! именно то, что я искал! - person Toran Billups; 02.10.2012
comment
но разве DS.Model не класс, а НЕ объект? Почему тогда вы говорите, что мы вызываем расширение для объекта? Я немного смущен. - person Aras; 02.10.2012

Обратите также внимание, что вы можете расширить экземпляр, используя просто reopen. Документ Emberjs содержит пример, который вы найдете по адресу http://emberjs.com/guides/object-model/reopening-classes-and-instances/

person Patrick Hammer    schedule 18.01.2013