2013-07-22 3 views
1

Ember: 1.0.0-rc.6Получить значение ответа Ember-Data Rest

Ember-данных: e999edb (2013-07-06 6:03:59 -0700)

Я делаю REST (POST) для входа в систему пользователя. Ответ сервера в порядке. Мне нужен идентификатор с сервера, но у меня только ID с «setTimeout».

Я думаю, что это неправильный путь.

В чем моя ошибка?

В контроллере я называю:

var login = App.Login.createRecord(this.getProperties("email", "password")); 

login.on("didCreate", function(record) { 
    console.log(record.get("id"));  // ID is null 
    console.log(record.get("email")); 
}); 

setTimeout(function() { 
    console.log(login.get("id"));  // ID is available 
    console.log(login.get("email")); 
}, 500); 

DS.defaultStore.commit(); 

ответ

1

Вы правы - есть ошибка в Ember-данных, где materializeData событие, которое в основном устанавливает идентификатор и разворачивает ответ сервера не происходит, пока обратный вызов didCreate. Так что происходит в том, что в вашем обратном вызове login.on("didCreate" ....) запись еще не реализована.

Это, кажется, по-прежнему является проблемой - см эту тему для получения дополнительной информации: https://github.com/emberjs/data/issues/405#issuecomment-17107045

Обход

Ваша работа вокруг прекрасно, но проще один, чтобы обернуть ваш (очиститель?) обратный вызов действие в Ember.run.next:

login.on("didCreate", function(record) { 
    Ember.run.next(function() { 
    console.log(record.get("id"));  // ID should be set 
    console.log(record.get("email")); 
    } 
}); 

Таким образом, по крайней мере, вам не нужно иметь дело с тайм-аутом.

Я считаю, что это работает, задерживая действия до следующего цикла запуска, и к тому времени материализация должна была произойти. More on the Ember run loop

Источник: https://github.com/emberjs/data/issues/405#issuecomment-18726035

+0

Спасибо! В моем случае я могу использовать теперь наблюдателя для id. idObserver: function() { /* ... */ } .observes ("id") –

+0

Это решение работает, я пробовал больше, чем пару раз. Это не работает, и запись материализуется, чтобы получить идентификатор от него, все равно id возвращает null – Amerrnath

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