2014-12-26 6 views
0

Я получил это:Доступ к хранилищу из статического метода модели (ака класса)?

Post.reopenClass({ 
    myStaticMethod: function() { 
    // I need to access the store here! 
    // this.store => undefined 
    } 
}); 

PS Почему я не могу просто импортировать в магазин или что-то?

+0

Вы пытаетесь получить доступ к другой модели? – givanse

ответ

4

Поскольку класс модели не подключен к определенному магазину. В магазинах хранятся экземпляры моделей, а не классы моделей. Экземпляры модели создаются из магазина через store.createRecord(model..., а результирующие экземпляры размещаются в этом хранилище. Поэтому теоретически вы можете иметь экземпляры одного и того же класса модели в разных магазинах.

Если вы действительно хотите получить доступ к магазину, вы можете выполнить поиск в контейнере (запах кода). Или, вы можете договориться пройти в магазине как параметр до myStaticMethod, если это возможно (лучше).

Предполагаю, что вы хотите получить доступ к хранилищу из статического метода, потому что вы хотите создать запись или найти ее или что-то еще. Предположим, вы хотели написать вариант createRecord, который сделал что-то особенное. Очевидным способом подхода было бы добавить его в основной магазин или, возможно, поместить его в подкласс DS.Store и вызвать его как store.createRecordSpecial('model', ....

+0

спасибо, torazaburo. Ваше предположение верно: я хочу настроить 'createRecord'. Трудность состоит в том, что это должно быть обещание ('store.find'). Но я понял, что мне не нужна запись, которая немедленно появляется. Поэтому вместо использования статического метода в модели, я собираюсь сделать 'store.createRecord ('foo'). Customize()'. Запись будет отображаться нестандартно, но затем будет настроена сама по себе, когда обещание будет устранено. Думаю, все в порядке. –

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