我有一个如下所示的“盒子”路由/控制器;Ember了解路由/控制器之间的执行流程
export default Ember.Controller.extend({
initialized: false,
type: 'P',
status: 'done',
layouts: null,
toggleFltr: null,
gridVals: Ember.computed.alias('model.gridParas'),
gridParas: Ember.computed('myServerPars', function() {
this.set('gridVals.serverParas', this.get('myServerPars'));
this.filterCols();
if (!this.get('initialized')) {
this.toggleProperty('initialized');
} else {
Ember.run.scheduleOnce('afterRender', this, this.refreshBox);
}
return this.get('gridVals');
}),
filterCols: function()
{
this.set('gridVals.layout', this.get('layouts')[this.get('type')]);
},
myServerPars: function() {
// Code to set serverParas
return serverParas;
}.property('type', 'status', 'toggleFltr'),
refreshBox: function(){
// Code to trigger refresh grid
}
});
我的路线看起来像;
export default Ember.Route.extend({
selectedRows: '',
selectedCount: 0,
rawResponse: {},
model: function() {
var compObj = {};
compObj.gridParas = this.get('gridParas');
return compObj;
},
activate: function() {
var self = this;
self.layouts = {};
var someData = {attr1:"I"};
var promise = this.doPost(someData, '/myService1', false); // Sync request (Is there some way I can make this work using "async")
promise.then(function(response) {
// Code to use response & set self.layouts
self.controllerFor(self.routeName).set('layouts', self.layouts);
});
},
gridParas: function() {
var self = this;
var returnObj = {};
returnObj.url = '/myService2';
returnObj.beforeLoadComplete = function(records) {
// Code to use response & set records
return records;
};
return returnObj;
}.property(),
actions: {
}
});
我的模板看起来像
{{my-grid params=this.gridParas elementId='myGrid'}}
我doPost方法看起来像下面;
doPost: function(postData, requestUrl, isAsync){
requestUrl = this.getURL(requestUrl);
isAsync = (isAsync == undefined) ? true : isAsync;
var promise = new Ember.RSVP.Promise(function(resolve, reject) {
return $.ajax({
// settings
}).success(resolve).error(reject);
});
return promise;
}
鉴于上述设置,我想了解执行的(用于不同的钩即)流/序列。 我正在尝试调试,并且从一个类跳到另一个类。 另外,2个具体问题;
我期待“激活”钩最初将被解雇,但发现事实并非如此。它首先执行“gridParas”钩子 ,即在“激活”钩子之前。是否因为模板中指定的“gridParas” ?
当我为/ myService1执行this.doPost()时,它必须是“同步”请求,否则执行流将更改,并且出现错误。 其实我想filterCols()控制器内的代码 this.set('gridVals.layout',this.get('layouts')[this.get('type')])到 只能在响应后执行已从 /myService1收到。但是,到目前为止,我必须使用“同步”请求来执行 ,否则使用“异步”执行将移至filterCols()和 ,因为我还没有响应,它会引发错误。
我想补充,我使用的灰烬2.0版
Thx for the response ...对于doPost()部分...基本上有2个AJAX调用被创建..首先是/ myService1(包裹在我的自定义承诺实现方法中)和第二个/ myService2(这实际上是由我的自定义组件当我说returnObj.url ='/ myService2') 我希望这些按以下顺序工作; 1.调用/ myService1 2.然后在从1响应后,调用/ myService2 3.然后控制应该去控制器和网格应该填充(即下面的代码执行... this.set('gridVals。布局',this.get('layouts')[this.get('type')]);) – testndtv