В Ember, когда модель доступна для контроллера?Ember.js: Когда модель доступна для контроллера?
Ниже приведено простое приложение Ember со статической моделью и контроллером, пытающимся получить доступ к модели на init
. Вы заметите, что на init
атрибутом модели title
является undefined
. Тем не менее, setTimeout показывает, что model
позже доступен.
У меня создалось впечатление, что Эмбер не будет инициировать контроллер, пока модель не будет готова. Это верно? Документация Ember (http://emberjs.com/guides/routing/specifying-a-routes-model/) указывает, что модели, даже если они загружаются асинхронно, доступны при создании экземпляра контроллера.
http://jsfiddle.net/vu263uwq/1/
App = Ember.Application.create({});
App.IndexRoute = Ember.Route.extend({
model: function() {
return posts[0];
}
});
App.IndexController = Ember.ObjectController.extend({
alertTitle: function() {
var that = this;
jQuery(".output").append("1. "+this.get("title")+"<br />"); //Returns "undefined"
setTimeout(function() {
jQuery(".output").append("2. "+that.get("title")); //Returns the correct title
}, 1000);
}.on("init")
});
var posts = [
{
id: 1,
title: "First title",
body: "Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Nullam quis risus eget urna mollis ornare vel eu leo. Cras justo odio, dapibus ac facilisis in, egestas eget quam."
},{
id: 2,
title: "Second title",
body: "Maecenas faucibus mollis interdum. Vestibulum id ligula porta felis euismod semper. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum."
}
];
https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/ system/route.js # L981 - это место, где создается экземпляр контроллера. :) – Microfed
@Microfed ах, я исправил свой пост. Я имел в виду, что init вызывается, когда создается экземпляр контроллера, который происходит перед вызовом 'this.setupController (контроллер, контекст, переход);' – sunrize920
@ sunrize920 Есть ли событие, которое вызовет функцию внутри контроллера, когда модель доступен? Например, '.on (« ready »)' или что-то в этом роде? Есть ли причина, по которой контроллер создается до того, как модель будет доступна? Кажется странным, поскольку от него зависит Контролер. Просто любопытно. – Jason