2012-10-05 76 views
1

這是fiddle。這是gist與我的本地文件的內容。你可以看到,HTML和JavaScript是相同的,我加載了相同版本的jQuery,Handlebars.js和Ember.js庫。它在本地按預期工作,但不會在jsFiddle.net上呈現應用程序模板。爲什麼這個Ember.js應用程序在本地工作,但不在jsFiddle.net上?

我看到在Web控制檯以下錯誤:

[19:44:18.202]錯誤:斷言失敗:你必須通過至少一個對象和事件名稱Ember.addListener @https://github.com/downloads/emberjs/ember.js/ember-latest.js:51

順便提一下,要將測試要點作爲本地HTML文件進行測試,請確保將其運行在Web服務器後面,否則瀏覽器將不會下載JavaScript庫。如果您安裝了精簡版(ruby webserver),請轉到它所在的目錄並運行thin -A file start,然後在瀏覽器中導航到localhost:3000/jsfiddle-problem.html。

回答

0

這很奇怪 - 我無法讓你的小提琴工作,特別是你的{{controller.foo}}調用,直到我禁用autoinit。我猜測在使用jsfiddle時,應用程序在看到你的路由器之前初始化關閉。我還注意到,即使您將enableLogging設置爲true,您的小提琴路由器也不記錄任何輸出。

我更新了你的小提琴,不使用autoinit,http://jsfiddle.net/zS5uu/4/。我知道今天發佈了一個新版本的ember-latest,我想知道是否有關於初始化的任何變化。

3

如果您將小提琴上的「代碼包裹」配置設置爲除「onLoad」之外的其中一個選項,則您的應用程序將起作用。這是一個example

原因是Ember在jQuery ready事件觸發時初始化應用程序(假設您沒有將Ember.Application.autoinit設置爲false)。將jsFiddle「Code Wrap」配置設置爲「onLoad」後,將在jQuery ready事件觸發後將應用程序引入文檔,從而在Ember自動初始化後引入該文檔。

請參閱本文寫作當天採用的ember-latest代碼片段,該文檔將Ember自動初始化在傳遞給$()。ready的處理程序函數中執行。

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