2014-03-26 14 views
5

我真的希望從emberjs團隊會有人閱讀。加載時出錯路線:類型錯誤:未定義是不是一個函數

我在幾種語言一個非常有經驗的程序員。

& AFA燼而言,​​它不是學習曲線也沒有,我覺得缺乏知識&教程, 而是我認爲它的不斷變化中消耗了大量的時間框架的來源&開發環境,努力和能源, 試圖找出各種SO問題和谷歌引用不同/較舊版本的框架時出了什麼問題。

我覺得需要一些什麼樣的什麼,以及如何在這裏配置你的開發環境是必要工作的結構圖的。

有很多答案是不一定正確的方向指向的,它很難形容,但我種得到的感覺文檔相對滯後,而框架是跑步前進。

我經歷了所有José Mota的優秀教程,並且在構建實際書籤應用程序的最後階段,我遇到了很多問題,以至於學習emberjs不是主要問題,而是圍繞它的基礎設施消耗了大部分時間。

它開始與Ruby版本和管理這些在Ubuntu 12.04,紅寶石的ember-data依賴(編譯只能用紅寶石1.9),以localstorage_adapter.js以及如何使用它燼工作... 的例子GitHub的頁面上給出了後來不起作用。

配置:
ubuntu的12.04.4 餘燼1.4.1 + pre.af87bd20 的jquery-1.9.1 車把-V1.3.0 餘燼數據1.0.0-beta.7.f87cba88 紅寶石1.9.2p290

José Mota's great tutsplus course 因此,這裏是我的問題:

Error while loading route: TypeError: undefined is not a function 
at App.BookmarksNewRoute.Ember.Route.extend.model (http://localhost:8000/js/app/routes/bookmarks_new.js:3:23) 
at superWrapper [as model] (http://localhost:8000/js/vendor/ember.js:1239:16) 

應用程序代碼(我會盡量明確):

路線

文件名:bookmarks_new.js

App.BookmarksNewRoute = Ember.Route.extend({ 
model: function() { 
    return App.Bookmark.createRecord(); 
} 

})

模式

文件名:bookmark.js

App.Bookmark = DS.Model.extend({ 
title: DS.attr("string"), 
url: DS.attr("string") 

})

文件名:router.js

App.Router.map(function() { 
    this.resource("bookmarks", function(){ 
    this.route("new"); 
    }); 
}); 

文件名:存儲。js

(1) 
App.Store = DS.Store.extend({ 
revision: 14, 
adapter: DS.LSAdapter 
}); 
(2) 
App.Store = DS.Store.extend(); 
App.ApplicationAdapter = DS.LSAdapter; 
(3) 
App.Store = DS.Store.extend(); 
App.ApplicationAdapter = DS.LSAdapter.extend({ 
    namespace: 'bookmarks' 
}); 
(4) 
App.ApplicationSerializer = DS.LSSerializer.extend(); 
App.ApplicationAdapter = DS.LSAdapter.extend({ 
    namespace: 'bookmarks' 
}); 

number 1 & 4工作,但哪一個是正確的? 數字2,3在SO或谷歌不同的答案中找到,以解決不同的人的問題。

控制器

文件名:bookmarks.js

App.BookmarksController = Ember.ArrayController.extend(); 

文件名:bookmarks_new.js

App.BookmarksNewController = Ember.ObjectController.extend({ 
save: function() { 
    this.get("model.transaction").commit(); 
    // this.get("model").get("transaction").commit(); // similiar 
    this.get("router").transitionTo("bookmars"); 
} 
}); 

的index.html

**這裏是appera S(也被找出另一個人的問題),在其中,腳本放置在inbdex.html的順序是至關重要的:

<script type="text/javascript" src="js/vendor/jquery-1.9.1.js"></script> 
<script type="text/javascript" src="js/vendor/handlebars-v1.3.0.js"></script> 
<script type="text/javascript" src="js/vendor/ember.js"></script> 
<script type="text/javascript" src="js/vendor/ember-states.js"></script> 
<script type="text/javascript" src="js/vendor/ember-data.js"></script> 

<script type="text/javascript" src="js/app/app.js"></script> 
<script type="text/javascript" src="js/app/router.js"></script> 
<script type="text/javascript" src="js/vendor/localstorage_adapter.js"></script> 
<script type="text/javascript" src="js/app/store.js"></script> 

<script type="text/javascript" src="js/app/controllers/bookmarks.js"></script> 
<script type="text/javascript" src="js/app/controllers/bookmarks_new.js"></script> 

<script type="text/javascript" src="js/app/models/bookmark.js"></script> 

<script type="text/javascript" src="js/app/routes/bookmarks_new.js"></script> 

終於標記

<script type="text/x-handlebars" data-template-name="bookmarks"> 
    <h2>All my Bookmarks</h2> 
    <table> 
     <thead> 
      <tr> 
       <th>Title</th> 
       <th>URL</th> 
      </tr> 
     </thead> 

     <tbody> 
      {{#each controller}} 
      <tr> 
       <td>{{title}}</td> 
       <td>{{url}}</td> 
      </tr> 
      {{else}} 
      <tr> 
       <td>U have No bookmarks</td> 
      </tr> 
      {{/each}} 
     </tbody> 
    </table> 
    {{#link-to "bookmarks.new"}}Add new bookmark{{/link-to}} 
    {{outlet}} 
</script> 
<script type="text/x-handlebars" data-template-name="bookmarks/new"> 
    <h3>New Bookmark</h3> 
    <form {{action "save" on="submit"}}> 
     <p> 
      {{view Ember.TextField valueBinding="title" placeholder="type in a title"}} 
     </p> 
     <p> 
      {{view Ember.TextField valueBinding="url" placeholder="type in a URL"}} 
     </p> 
     <p> 
      <button>Create Bookmark</button> 
     </p> 
    </form> 
</script> 

OK ,所以點擊'添加新書籤'會產生上述錯誤。

爲什麼?

感謝您的時間... ... embereres

如果您發現任何信息丟失,請讓我知道。

回答

0

每當我遇到這些問題:

Error while loading route: TypeError: undefined is not a function 

這通常意味着之一:

  • 你的路線之一的你的模型函數返回任何結果(缺少return語句)
  • 你請求一個不存在的模型
  • 您的XHR一路失敗,以至於model()函數返回undefined

檢查瀏覽器開發人員工具中的網絡選項卡,以驗證您是否獲得了您期望的數據作爲回報。在本地存儲適配器的情況下,你需要檢查你是否得到了你期望的回報。

編輯:也許這截屏,這是我記錄在一次會議上演講我在今年早些時候做了,可能有所幫助:https://www.youtube.com/watch?v=KH5RreHtaaQ

+0

約阿希姆感謝您的回覆...給你的視頻拍攝,但GitHub的代碼是缺少一些文件,所以不能真正遵循你的教程...你有任何建議從哪裏開始?一些簡單的/基本的,如何在一個應用程序應用程序中爲單個頁面創建模型/視圖/控制器...... ???謝謝 – Jadeye

+0

看看我的書(Ember.js in Action)中的免費樣章:http://manning.com/skeie/它貫穿並解釋了每一步 –

相關問題