Ember JS如何设置应用程序

时间:2012-11-28 07:15:14

标签: javascript model-view-controller ember.js

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

如果我使用以下代码,它会抛出错误(它无法找到对象App):

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

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

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

这样做的最佳方式是什么?

5 个答案:

答案 0 :(得分: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);

答案 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);