6

我是 Ember 菜鸟,正在努力让它发挥作用;但是我对 App.initialize() 方法感到困惑。

如果我使用以下代码,它会引发错误(找不到对象 App):

App = Ember.Application.extend()
App.initialize()

但是,如果我使用以下代码;它说初始化被调用了两次。

App = Ember.Application.create()
App.initialize()

做这个的最好方式是什么?

4

5 回答 5

9

Application不再提供initialize方法。相反,您应该使用Application#deferReadinessApplication#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);
于 2012-11-28T12:31:49.580 回答
3

只需创建您的应用程序并让 Ember 对其进行初始化。

您需要做的就是:

App = Ember.Application.create()

应用程序不会立即初始化。它至少会等待 DOM 准备就绪并等待定义其余类(通过等待控制权从当前执行的 JavaScript 返回给浏览器)。

如果您想因其他原因推迟它,请执行以下操作:

App.deferReadiness();
$.getJSON("/boot", function() { App.advanceReadiness(); });

这将等待启动应用程序,直到/bootAjax 调用返回。

于 2013-01-16T19:51:08.363 回答
3

首先,您必须了解 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

于 2012-11-28T08:30:24.517 回答
1

看看这里如何做这些事情:

http://emberjs.com/documentation/#toc_creating-a-namespace

如何引导:

window.App = Ember.Application.create();

在没有使用过 ember.js 的情况下,我建议 create 和 initialize 都进行初始化,这就是为什么你得到后一个错误告诉你它被初始化了两次。

而您的第一个版本正在尝试扩展 Application 对象,即您创建新功能。

于 2012-11-28T08:12:22.777 回答
1

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);
于 2014-09-05T12:26:32.050 回答