我是 Ember 菜鸟,正在努力让它发挥作用;但是我对 App.initialize() 方法感到困惑。
如果我使用以下代码,它会引发错误(找不到对象 App):
App = Ember.Application.extend()
App.initialize()
但是,如果我使用以下代码;它说初始化被调用了两次。
App = Ember.Application.create()
App.initialize()
做这个的最好方式是什么?
我是 Ember 菜鸟,正在努力让它发挥作用;但是我对 App.initialize() 方法感到困惑。
如果我使用以下代码,它会引发错误(找不到对象 App):
App = Ember.Application.extend()
App.initialize()
但是,如果我使用以下代码;它说初始化被调用了两次。
App = Ember.Application.create()
App.initialize()
做这个的最好方式是什么?
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);
只需创建您的应用程序并让 Ember 对其进行初始化。
您需要做的就是:
App = Ember.Application.create()
应用程序不会立即初始化。它至少会等待 DOM 准备就绪并等待定义其余类(通过等待控制权从当前执行的 JavaScript 返回给浏览器)。
如果您想因其他原因推迟它,请执行以下操作:
App.deferReadiness();
$.getJSON("/boot", function() { App.advanceReadiness(); });
这将等待启动应用程序,直到/boot
Ajax 调用返回。
首先,您必须了解 create() 和 extend() 之间的区别。简单的理解方法是 extend() 方法只是扩展了 Ember.Application 的类,而 create() 方法创建了 Ember.Application() 的实例。在创建实例时,它运行构造函数。有 3 种方法可以创建 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 对象,请通过此链接。了解 Ember.Object
看看这里如何做这些事情:
http://emberjs.com/documentation/#toc_creating-a-namespace
如何引导:
window.App = Ember.Application.create();
在没有使用过 ember.js 的情况下,我建议 create 和 initialize 都进行初始化,这就是为什么你得到后一个错误告诉你它被初始化了两次。
而您的第一个版本正在尝试扩展 Application 对象,即您创建新功能。
Ember "create" method accepts either no arguments, or an object containing values to initialize the newly instantiated object with, so you might also go like this below:
var appConfig = {
Token: token;
};
App = Ember.Application.create(appConfig);