我有一個如下所示的「盒子」路由/控制器;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