2013-03-13 74 views
1

我想弄清楚Ember.js,並繼續打擊什麼似乎是基本的問題,沒有以我明白的方式記錄。將自定義函數添加到Ember.js ArrayControllers

我想要一個對象來管理一個東西的列表。 ArrayController似乎是有道理的。我假設讓該控制器加載來自第三方服務器(youtube)的數據是最有意義的。所以我的計劃是在控制器中寫入一些自定義函數來加載數據。

App.videoController = Ember.ArrayController.extend({ 
    loadSomeVideos() { 
     console.log("I have run"); 
    } 
}); 

我運行上面的代碼後,App.testController.someFunction()不存在。爲什麼不?我覺得我錯過了一些基本概念。

+0

首先必須將控制器重命名爲App.VideoController,從那裏你要調用的方法? – 2013-03-13 05:11:15

回答

2

當您調用Ember.ArrayController.extend時,實際上只是擴展該類而不創建具體實例,因此無法調用loadSomeVideos。

在Ember中有幾個約定可以讓你難倒,如果你不知道它們。如「未指定」所述,您應該使用以下約定來擴展該類。

請注意大寫的視頻控制器,並在我的定義方法loadSomeVideos方式:

App.VideoController = Ember.ArrayController.extend({ 
    loadSomeVideos: function() { 
     console.log("I have run"); 
    } 
}); 

現在,如果你想運行此,你需要創建應用程序的一個實例。 VideoController類。再次注意大小寫:

App.videoController = App.VideoController.create(); 

所以,我用一個小寫字母v代表實例,大寫字母v代表類。我剛剛創建了一個類(App.VideoController)的實例(App.videoController)。

要打電話給你的方法,你需要從實例調用它,就像這樣:

App.videController.loadSomeVideos(); 

檢查出文檔中的以下兩頁。

這第一頁爲您提供有關擴展類,然後實例化他們,你可以調用他們的方法的一些信息:

http://emberjs.com/guides/object-model/classes-and-instances/

第二頁進入一個位深度約更先進的方法重新開放,並reopenClass 。

http://emberjs.com/guides/object-model/reopening-classes-and-instances/