gpt4 book ai didi

controller - Ember.js 如何获取嵌套 Controller 名称的 Controller

转载 作者:行者123 更新时间:2023-12-03 15:07:28 27 4
gpt4 key购买 nike

我想用this.get('controllers.pack.query');要得到App.PackQueryControllerApp.PackController ,但失败了。

我认为问题是 Ember 使用 pack不是 pack.querycontrollerName当它尝试获取 Controller 时。
虽然我可以通过 this.controllerFor('pack.query') 获得 Controller ,
但 Ember 说它已被弃用,请使用 needs反而

我的路由器 map 如下所示,我已经定义了 needs: ['pack.query']App.PackController

App.Router.map(function () {
this.resource('pack', function () {
this.route('index', {path: '/:pack_id'})
this.route('query');
});
});

App.PackController = Ember.ObjectController.extend({
needs: ['pack.query'],
queryPack: function () {
var packQueryCtrller = this.get('controllers.pack.query');

Ember.debug('packQueryCtrller: ' + packQueryCtrller);
//DEBUG: packQueryCtrller: undefined

packQueryCtrller.queryPack(); //faild packQuery is undefined
}
});

App.PackQueryController = Ember.ArrayController.extend({
queryPack: function (queryKey) {
//...do query pack
}
});

最佳答案

Ember.inject.controller() 应该用于访问 Controller 。像这样使用它:

设置

...
myController: Ember.inject.controller('pack'),
nestedController: Ember.inject.controller('pack/query')
...

获取
...
this.get('myController');
this.get('nestedController');
...

上面的答案已更新以反射(reflect) needs deprecation在 Ember 1.13.5(2015 年 7 月 19 日发布)中。我在下面留下了旧答案,但除非您使用旧版本的 Ember,否则不应使用。

[已弃用] 使用 needs 从其他 Controller 访问嵌套 Controller :

套装 needs在 Controller 上:
...
needs: ['pack/query'],
...

然后使用以下方法访问它:
this.get('controllers.pack/query');

[已弃用] 从路由访问嵌套 Controller :

理想情况下, actions应该放在 Route 上。如果您使用的是 needs上面在您的 actions 中概述的模式在 Controller 上,考虑重构。

您可以使用 controllerFor 从路由访问嵌套 Controller 像这样:
this.controllerFor('pack/query')

关于controller - Ember.js 如何获取嵌套 Controller 名称的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com