如何扩展Ember的对象?

Pan*_*agi 3 ember.js

我正在寻找一种方法来扩展Ember的Object以包含一些额外的方法,以便它们在我的应用程序中的每个对象(View,ArrayController等)都可用.

具体来说,我想定义一些方法,介绍控制器,模型,视图,模板,帮助器等的一些命名约定.

例如:

如果查看的类名ArticlesListView,然后它的相关模型Article,控制器动作被命名为listArticlesController,模板是在app/articles一个名为list.js.hjs...

例如,最终结果应该是App.ArticlesListView.model()返回App.Article.

那么如何扩展核心Ember对象呢?

Ember.Object.extend({     // <--- ???

    model: function(context, params){

    }
});
Run Code Online (Sandbox Code Playgroud)

Luk*_*lia 8

增强现有对象的一般问题的答案是使用reopen:

Ember.Object.reopen({
    foo: function(){
        return 'bar';
    }
});
Run Code Online (Sandbox Code Playgroud)

至于你更具体的问题,那就更具挑战性了.对象通常不知道它所分配的属性的名称.您可以通过遍历命名空间(包括App)的属性并找到与当前类匹配的属性来实现目标.您可以缓存该属性名称以用于将来的性能.

另一种方法是定义一个辅助方法,用于定义将名称传递给的新模型,控制器等.该方法可以处理创建子类,将其分配给App的属性,以及使用名称设置实例变量.