我是Ember noob,我正努力让它发挥作用;但我对App.initialize()方法感到困惑。
如果我使用以下代码,它会抛出错误(它无法找到对象App):
App = Ember.Application.extend()
App.initialize()
但是,如果我使用以下代码;它说初始化被调用两次。
App = Ember.Application.create()
App.initialize()
这样做的最佳方式是什么?
答案 0 :(得分:9)
Application
不再提供initialize
方法。相反,您应该使用Application#deferReadiness
和Application#advanceReadiness
。
从Ember的源代码中提取的示例:
App = Em.Application.create();
App.deferReadiness();
jQuery.getJSON("/auth-token", function(token) {
App.token = token;
App.advanceReadiness();
});
此外,请检查jsfiddle中的示例:
window.App = Em.Application.create();
App.deferReadiness();
window.setTimeout(function() {
Em.TEMPLATES["application"] = Em.Handlebars.compile('<h1>App</h1> this is a template');
App.advanceReadiness();
}, 1500);
答案 1 :(得分:3)
首先,您必须了解create()和extend()之间的区别。简单的理解方法是extend()方法只是扩展了Ember.Application的类,但create()方法创建了Ember.Application()的实例。在创建实例时,它运行构造函数。有三种方法可以创建Ember.App并运行它。
1
var App= Ember.Application.extend()
App.initialize()
2
var App = Ember.Application.create()
一旦你创建了对象,就会初始化。
3
var App= Ember.Application.extend()
App.create()
要了解Ember Objects,请访问此链接。 Understanding Ember.Object
答案 2 :(得分:3)
只需创建您的应用程序,然后让Ember初始化它。
您需要做的就是:
App = Ember.Application.create()
应用不会立即初始化。它至少等待DOM准备就绪,并等待其他类的定义(等待控制从当前执行的JavaScript返回到浏览器)。
如果您因其他原因想要推迟,请执行以下操作:
App.deferReadiness();
$.getJSON("/boot", function() { App.advanceReadiness(); });
这将等待启动应用程序,直到/boot
Ajax调用返回。
答案 3 :(得分:1)
看看这里怎么做:
http://emberjs.com/documentation/#toc_creating-a-namespace
如何引导:
window.App = Ember.Application.create();
如果没有使用ember.js,我建议创建和初始化都进行初始化,这就是为什么你得到后者的错误告诉你它已经两次。
您的第一个版本正在尝试扩展Application对象,即您创建新功能。
答案 4 :(得分:1)
Ember“create”方法接受无参数或包含值的对象来初始化新实例化的对象,因此您可能也会如下所示:
var appConfig = {
Token: token;
};
App = Ember.Application.create(appConfig);