Javascript Ember JS如何设置应用程序

Javascript Ember JS如何设置应用程序,javascript,model-view-controller,ember.js,Javascript,Model View Controller,Ember.js,我是一个灰烬noob,并试图让它的工作;但是我对App.initialize()方法感到困惑 如果我使用以下代码,它会抛出错误(找不到对象应用程序): App = Ember.Application.extend() App.initialize() 但是,如果我使用以下代码;它说initialize被调用了两次 App = Ember.Application.create() App.initialize() 做这件事最好的方法是什么?看看这里如何做: 如何引导: window.App

我是一个灰烬noob,并试图让它的工作;但是我对App.initialize()方法感到困惑

如果我使用以下代码,它会抛出错误(找不到对象应用程序):

App = Ember.Application.extend()
App.initialize()
但是,如果我使用以下代码;它说initialize被调用了两次

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

做这件事最好的方法是什么?

看看这里如何做:

如何引导:

window.App = Ember.Application.create();
如果不使用ember.js,我建议create和initialize都进行初始化,这就是为什么后一个错误告诉您它已初始化两次


您的第一个版本试图扩展应用程序对象,即创建新功能。

首先,您必须理解create()和extend()之间的区别。容易理解的是extend()方法只是扩展了Ember.Application的类,而create()方法创建了Ember.Application()的实例。创建实例时,它运行构造函数。有3种方法可以创建Ember.App并运行它

一,

二,

这将在您创建对象后立即初始化

三,


要进一步了解余烬对象,请访问此链接

应用程序不再提供
初始化
方法。相反,您应该使用和组合

从Ember的源代码中提取的示例:

App = Em.Application.create();
App.deferReadiness();

jQuery.getJSON("/auth-token", function(token) {
  App.token = token;
  App.advanceReadiness();
});
此外,请将样本签入:

window.App=Em.Application.create();
App.deferready();
setTimeout(函数(){
Em.TEMPLATES[“application”]=Em.handlebar.compile('App this is a template');
App.advanceReadiness();
}, 1500);

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

您需要做的只是:

App = Ember.Application.create()
应用程序将不会立即初始化。它至少会等待DOM就绪和定义其他类(等待控件从当前执行的JavaScript返回到浏览器)

如果出于其他原因要推迟,请执行以下操作:

App.deferReadiness();
$.getJSON("/boot", function() { App.advanceReadiness(); });
这将等待启动应用程序,直到返回
/boot
Ajax调用。

余烬“create”方法不接受任何参数,或者接受包含用于初始化新实例化对象的值的对象,因此您也可以执行以下操作:

 var appConfig = {
        Token: token;
    };

 App = Ember.Application.create(appConfig);

此答案使返回值成为全局变量(App.token)。如何将值放入控制器中?在最新的Ember中,似乎没有简单的方法从应用程序中访问给定的控制器。@KevinPauli如果
令牌
在控制器中,我们可以使用(从另一个控制器)或(从路由),但在上面的jQuery回调中,我们不在控制器或路由中,这将允许我通过“this”访问它。在本例中,我们处于全局Javascript空间。我看到的每个延迟/提前准备的例子似乎都遵循这种模式,并将AJAX结果作为一个全局变量直接粘贴到应用程序中。我继续问这个问题:如何将AJAX调用返回的值放入控制器,而不是应用程序中的全局变量?我试图避免全局变量。jquery调用发生在任何余烬对象之外,全局“App”名称空间无法访问我可以看到的单个控制器。。。
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);
App = Ember.Application.create()
App.deferReadiness();
$.getJSON("/boot", function() { App.advanceReadiness(); });
 var appConfig = {
        Token: token;
    };

 App = Ember.Application.create(appConfig);