如何将父类控制器中的哈希属性与子类控制器中具有相同名称的属性混合

时间:2014-10-30 18:59:35

标签: ember.js

来自父类的控制器inherit动作处理程序中的actions哈希...如何在控制器中模仿其他哈希的这种行为?

例如:我在父控制器中有一个名为sockets的对象,其中包含一些内容。当我创建一个具有名为sockets的对象的子类时...我希望混合对象的两个内容,而不是用子类sockets对象覆盖... < / p>

我想要这个(actions哈希的相同行为):

父类

export default Ember.ObjectController.extend({
  sockets: {
    hi: function() {};
  }
});

儿童班

export default ParentController.extend({
  sockets: {
    bye: function() {};
  }
});

ChildClassController.create().get('sockets.hi'); // Exists
ChildClassController.create().get('sockets.bye'); // Exists

首先我尝试使用mixin,但是mixin中的hash内容被控制器中的hash内容所覆盖。 在我尝试使用concatenatedProperties之后......但这会创建一个内部有两个哈希的数组...

1 个答案:

答案 0 :(得分:1)

Wildhoney在https://github.com/Wildhoney/EmberSockets/issues/43中解决。

一种解决方案可能是实现init方法并自己合并两个对象:

concatenatedProperties: ['sockets'],
init: function() {
  var that = this,
      sockets = that.get('sockets'),
      merged = Ember.$.extend.apply( Ember.$, sockets );

  that.set('sockets', merged);
  that._super();
},