1

我正在尝试找出 Ember.js 并继续解决似乎没有以我理解的方式记录的基本问题。

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

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

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

4

1 回答 1

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/

第二页深入介绍了更高级的方法reopen 和reopenClass。

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

于 2013-03-13T06:14:26.390 回答