【问题标题】:Accessing Ember Controller with Mixins使用 Mixins 访问 Ember 控制器
【发布时间】:2014-01-14 10:59:41
【问题描述】:

此问题与this question I asked earlier 有关。我有一个具有关联 CatsController 的 Cat 模型。我已经像这样添加了 EmberCrossfilter Mixin:

App.CatsController = Ember.ArrayController.extend(EmberCrossfilter, {
  // stuff here
});

我现在想从我的索引控制器调用这个控制器上的一个动作,可以这样做:

App.IndexController = Em.ObjectController.extend({
  needs: ['cats', 'dogs'],  
  actions: {   
    indexAction: function() {      
      this.get('controllers.cats').send('catAction')
      this.get('controllers.dogs').send('dogAction')
    }
  }
})

该操作被调用,但如果我查看 this 对象,我会得到一些没有 mixin 属性且数组长度为 0 的东西:

__ember1389647609449: undefined
__ember1389647609449_meta: Meta
_childContainers: Object
_subControllers: Array[0]
_super: undefined
model: (...)
sortAscending: (...)
sortProperties: (...)
get sortProperties: function () {
set sortProperties: function (value) {
__proto__: Object

如果我直接从我的猫模板中调用 catAction 方法,并查看 this 对象,我会看到所有 mixin 属性并且数组长度是正确的。

@each: (...)
get @each: function () {
set @each: function (value) {
__each: Class
__ember1389647609449: "ember425"
__ember1389647609449_meta: Meta
_childContainers: Object
_crossfilter: Object
_dimensionAge: Object
_dimensionColour: Object
_dimensionCountry: Object
_dimensionCuteness: Object
_dimensionDefault: Object
_dimensionName: Object
_dimensionNameRegexp: Object
_subControllers: Array[4]
_super: undefined
content: (...)
get content: function () {
set content: function (value) {
count: (...)
get count: function () {
set count: function (value) {
model: (...)
sortAscending: (...)
sortProperties: (...)
get sortProperties: function () {
set sortProperties: function (value) {
target: Class
toString: function () { return ret; }
__proto__: Object

这导致我在尝试从我的索引控制器调用操作时出现问题,因为传递的 CatsController 没有任何 mixin 属性或方法。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 当你说你看this的上下文是什么,你在catAction/dogAction中吗
  • 是的,在 catAction 中。
  • 这看起来很有效,你能告诉我我做了什么不同的emberjs.jsbin.com/aSIZIbu/4/edit
  • 你最近一直是我的救星@kingpin2k!!我必须等到明天再检查我的真实版本,但你做得很好。我不确定有什么不同。我稍微更新了它以使用 Ember-Data,但它仍然有效! jsbin.com/OSapEGAx/2/edit?html,js,console,output。非常感谢,如果您发布答案,我一定会给您信任!

标签: javascript ember.js ember-data


【解决方案1】:

mixin 的属性可能不会出现在对象本身上,但如果你调用它,属性和 getter/setter 将被获取

http://emberjs.jsbin.com/aSIZIbu/4/edit

【讨论】:

  • 这实际上仍然不起作用。我试图在 JSBin 中重现问题,但没有成功。我只是不断添加部分,最终我会找到它。问题是 EmberCrossfilter 在初始化时添加了 _dimension 属性,以后调用时我无法使用 get 访问这些属性。我将代码更改为使用 set,但这仍然不起作用。如果找到它,我会通知您,但我想您可能有一些故障排除提示。
  • 我想我重新创建了它,当按下索引操作时一切都未定义jsbin.com/IVaMUPO/2/edit
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2015-02-07
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多