一个简单的问题,我可以从ember中的mixin中获取对控制器的引用吗?
我有一个ApplicationController,我在其中设置通过ember-data检索的值,我想从Mixin中引用这些值。我找不到任何东西,所以我的假设是没有API吗?
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();
};
}
});
答案 0 :(得分:1)
在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:http://jsbin.com/ILeguSO/4/edit
希望它有所帮助。