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



控制器中的actions哈希从父类继承操作处理程序。。。我如何在控制器中用其他散列来模仿这种行为?

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

我想要这个(与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之后。。。但这会创建一个数组,其中包含两个散列。。。

由Wildneye在中解决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();
},

最新更新