【发布时间】:2013-10-22 11:01:04
【问题描述】:
考虑这种情况。我有一个通用逻辑,我想在 Ember.ArrayController 和 Ember.ObjectController 实例中重用它。
Ember.ArrayController 和 Ember.ObjectController 都是从基本的 Ember.Object 派生的,所以我尝试类似:
AbstractController = Ember.Object.extend({
// some methods with common logic
});
AbstractArrayController = AbstractController.extend({});
AbstractObjectController = AbstractController.extend({});
问题是我还需要 AbstractArrayController 和 AbstractObjectController 从它们的父级(Ember.ArrayController 和 Ember.ObjectController)扩展。
我将如何实现这种继承?
我现在正在研究reopen 和reopenClass 方法,也许它们可能有用:http://emberjs.com/api/classes/Ember.Object.html#method_reopen
我试着做类似的事情:
Ember.Object.reopenClass({
foo: function () {
return "foo";
}.property("foo")
});
但这似乎不起作用。
解决问题的另一种方式:
App.HelloController = Ember.ObjectController.extend({
foo: function () {
return "foo";
}.property("foo")
});
App.WorldController = Ember.ObjectController.extend({
foo: function () {
return "foo";
}.property("foo")
});
如何抽象出 foo 计算属性?
【问题讨论】:
-
您是否尝试过扩展 Ember 的控制器并通过 mixin 添加代码?
-
@Thomas 我不知道 mixins。我刚刚尝试过,它可以工作;)谢谢。您可以将其发布为答案吗? Mixins 似乎是此类问题的正确解决方案。
标签: ember.js