Ember.js 来自Mixin的参考控制器
一个简单的问题,我可以从ember中的mixin中获得对控制器的引用吗 我有一个ApplicationController,在这里我设置通过ember数据检索的值,我想从Mixin引用这些值。我找不到任何东西,所以我假设没有用于此的APIEmber.js 来自Mixin的参考控制器,ember.js,Ember.js,一个简单的问题,我可以从ember中的mixin中获得对控制器的引用吗 我有一个ApplicationController,在这里我设置通过ember数据检索的值,我想从Mixin引用这些值。我找不到任何东西,所以我假设没有用于此的API App.Searchable = Ember.Mixin.create({ search: function () { if (this.isValid()) { var controller = this.co
App.Searchable = Ember.Mixin.create({
search: function () {
if (this.isValid()) {
var controller = this.controllerFor('application');
return controller.getProperties('fromDate', 'toDate', 'brokers', 'locations');
}
else
return this.isInvalid;
},
isValid: function () {
var controller = this.controllerFor('search');
var fromDate = moment(this.get('fromDate'), 'YYYY-MM-DD');
var toDate = moment(this.get('toDate'), 'YYYY-MM-DD');
return moment(fromDate).isBefore(toDate) || moment(fromDate).isSame(toDate);
},
isInvalid: function () {
$("#date-range-error").show();
}
});
App.PnlRoute = Ember.Route.extend(App.Searchable, {
model: function () {
return this.store.find('pnl', this.search());
},
renderTemplate: function () {
this.render('pnl', {
into: 'application',
outlet: 'data',
controller: 'pnl'
});
},
actions: {
filter: function () {
this.controllerFor('pnl').set('model', this.store.find('pnl', this.search()));
}
}
});
App.ApplicationController = Ember.ArrayController.extend({
title: 'Pnl',
fromDate: null,
toDate: null,
locations: [],
ccyPairs: [],
brokers: [],
init: function () {
var self = this;
this.store.find('date').then(function (result) {
var date = result.objectAt(0);
self.set('fromDate', date.get('from'));
self.set('toDate', date.get('to'));
}), function (error) {
$("#date-init-error").show();
};
}
});
在mixin中使用
this.controllerFor('application')
是不起作用的,因此,可以这样做的一种方法是将ApplicationController
的引用存储在您创建的mixin中的局部变量中,以便以后可以轻松访问它
例如:
App.ApplicationController = Ember.ObjectController.extend();
App.Searchable = Ember.Mixin.create({
ctrl: null,
search: function() {
console.log(this.get('ctrl'));
}
});
App.ApplicationRoute = Ember.Route.extend(App.Searchable, {
activate: function() {
this.set('ctrl', this.controllerFor('application'));
this.search();
}
});
示例jsbin:
希望能有所帮助。在mixin中使用此.controller('application')不起作用,因此一种方法是将
ApplicationController
的引用存储在创建的mixin中的局部变量中,以便以后可以轻松访问它
例如:
App.ApplicationController = Ember.ObjectController.extend();
App.Searchable = Ember.Mixin.create({
ctrl: null,
search: function() {
console.log(this.get('ctrl'));
}
});
App.ApplicationRoute = Ember.Route.extend(App.Searchable, {
activate: function() {
this.set('ctrl', this.controllerFor('application'));
this.search();
}
});
示例jsbin:
希望有帮助。您能分享SearchController和Mixin的代码吗?这将更容易向您展示如何做到这一点。您可以共享来自SearchController和Mixin的代码吗?告诉你怎么做会更容易谢谢你!实际上,我进行了重组,以便将Mixin用于控制器而不是路由。但是你的帮助确实让我朝着更好的方向前进。非常感谢!实际上,我进行了重组,以便将Mixin用于控制器而不是路由。但你的帮助确实让我朝着更好的方向前进。