我试图弄清楚Ember.js并继续打出看似基本的问题,这些问题没有以我理解的方式记录下来。
我想要一个对象来管理一个东西列表。 ArrayController似乎有意义。我假设让控制器从第三方服务器(youtube)加载数据是最有意义的。所以我的计划是在控制器中编写一些自定义函数来加载数据。
App.videoController = Ember.ArrayController.extend({
loadSomeVideos() {
console.log("I have run");
}
});
运行上面的代码后,App.testController.someFunction()不存在。为什么不?我觉得我错过了一些基本概念。
答案 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/