Ember-Data: поиск записей вместо обещаний

#ember.js #dependency-injection #callback #ember-data #promise

#ember.js #внедрение зависимостей #обратный вызов #ember-данные #обещание

Вопрос:

Я пытаюсь получить зарегистрированного пользователя (от /users?current=1 которого работает) и сделать этого пользователя доступным как свойство во всем моем приложении, но вместо того, чтобы вводить моего пользователя, я вводю это:

Object { type: makeCtor/Class(), query: Object, content: Getter, store: Object, manager: Object, isLoaded: true, meta: Object, 3 more… }

Это, как и полностью, не похоже на то, что я хочу. Запись отображается в хранилище просто отлично. Вот соответствующий код. Спасибо, что посмотрели.

 App.initializer({
    name: "appUser",
    after:['ember-data'],

    initialize: function (container, application) {
        var store = container.lookup('store:main');
        store.find('user',{current: "1"}).then(function(data){
            var user = data; //data.get('content')[0] (?) (Something else?)
            application.register("my:user", user, {instantiate:false});
            application.inject("controller", "user", "my:user");
            application.inject("route", "user", "my:user");
        });
    }
});
 

Ответ №1:

Коллекции имеют свойство ( firstObject ), которое возвращает первый элемент в коллекции или undefined .

Вы должны быть осторожны в своих размышлениях о том, как должна выглядеть модель, когда вы смотрите на нее в консоли. Он скрывает свойства во вложенных свойствах и возвращает их при использовании методов получения и устанавливает их при использовании установщиков. Это все для возможности отката.

 App.initializer({
    name: "appUser",
    after:['ember-data'],

    initialize: function (container, application) {
        var store = container.lookup('store:main');
        store.find('user',{current: "1"}).then(function(data){
            var user = data.get('firstObject');  
            console.log(user.get('first_name')); // use getters to view the properties
            application.register("my:user", user, {instantiate:false});
            application.inject("controller", "user", "my:user");
            application.inject("route", "user", "my:user");
        });
    }
});
 

Комментарии:

1. Спасибо kingpin, ты действительно помог мне разобраться с Ember. Ваше решение работает.

2. Рад слышать, кривая обучения немного чудовищна, но как только вы освоите некоторые основы, это станет супер круто. Удачи!