为什么这个Ember.js应用程序在本地工作但不在jsFiddle.net上工作?

时间:2012-10-05 23:46:52

标签: ember.js handlebars.js jsfiddle

这是fiddle。这是我的本地文件内容的gist

正如您所看到的,HTML和JavaScript是相同的,我正在加载jQuery,Handlebars.js和Ember.js库的相同版本。它在本地按预期工作,但不在jsFiddle.net上呈现应用程序模板。

我在Web控制台中看到以下错误:

[19:44:18.202]错误:断言失败:您必须至少将对象和事件名称传递给Ember.addListener @ https://github.com/downloads/emberjs/ember.js/ember-latest.js:51

BTW-要将gist作为本地HTML文件进行测试,请确保在Web服务器后面运行它,否则您的浏览器将无法下载JavaScript库。如果你已经安装了瘦(ruby webserver),请转到它所在的目录并运行thin -A file start,然后在浏览器中导航到localhost:3000 / jsfiddle-problem.html。

2 个答案:

答案 0 :(得分:3)

如果您将小提琴上的“Code Wrap”配置设置为“onLoad”以外的其中一个选项,您的应用程序将起作用。这是一个example

原因是当jQuery ready事件触发时,Ember初始化一个应用程序(假设你没有将Ember.Application.autoinit设置为false)。将jsFiddle“Code Wrap”配置设置为“onLoad”后,在jQuery ready事件触发后,应用程序将被引入到文档中,因此在Ember自动初始化之后。

请参阅本文撰写当天的ember-latest下面的代码片段,该文档描述了在传递给$()。ready的处理函数中执行Ember自动初始化。

if (this.autoinit) {
    var self = this;
    this.$().ready(function() {
        if (self.isDestroyed || self.isInitialized) return;
        self.initialize();
    });
}

答案 1 :(得分:0)

这很奇怪 - 在我禁用autoinit之前,我无法让你的小提琴工作,特别是你的{{controller.foo}}通话。我猜测在使用jsfiddle时,应用程序初始化开始之前看到你的路由器。我还注意到,即使你将enableLogging设置为true,路由器也没有记录任何输出。

我更新了你的小提琴,不使用autoinit,http://jsfiddle.net/zS5uu/4/。我知道今天发布了一个新版本的ember-latest,我想知道是否有关于初始化的更改。