将自定义函数添加到Ember.js ArrayControllers

时间:2013-03-13 04:27:56

标签: ember.js

我试图弄清楚Ember.js并继续打出看似基本的问题,这些问题没有以我理解的方式记录下来。

我想要一个对象来管理一个东西列表。 ArrayController似乎有意义。我假设让控制器从第三方服务器(youtube)加载数据是最有意义的。所以我的计划是在控制器中编写一些自定义函数来加载数据。

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

运行上面的代码后,App.testController.someFunction()不存在。为什么不?我觉得我错过了一些基本概念。

1 个答案:

答案 0 :(得分:2)

当你调用Ember.ArrayController.extend时,你实际上只是扩展了类而不是创建一个具体的实例,因此你不能调用loadSomeVideos。

Ember中有一些约定,如果你不知道它们会让你难过。如“未指定”所述,您应该使用以下约定来扩展该类。

请注意大写的VideoController以及我定义loadSomeVideos方法的方式:

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

现在,如果要运行此命令,则需要创建App.VideoController类的实例。再次注意大写:

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

因此,我使用小写v作为实例,使用大写V作为类。我刚刚创建了一个类(App.videoController)的实例(App.videoController)。

要调用您的方法,您需要从实例中调用它,如下所示:

App.videController.loadSomeVideos();

请查看文档中的以下两页。

这个第一页为您提供了有关扩展类的一些信息,然后将它们实例化,以便您可以调用它们的方法:

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

关于更高级的方法重新打开和重新打开类,第二页深入探讨。

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

相关问题