我的编码风格可能很糟糕,因为我还在学习。我需要知道如何处理将额外参数传递给 Emberjs 中的链式承诺。
我想要达到的目标。我的路线中的许多承诺看起来很混乱,所以我决定为每个承诺编写函数
model: function(){
var self=this,carP,planeP,bikeP;
carP = self.store.find('car');
planeP = self.store.find('plane');
bikeP = self.store.find('bikeP');
pilotsP = planeP.then(function(planePArr){
return planePArr.forEach(function(plane){
return plane.get('pilots') //in plane model: pilots: DS.hasMany('pilot')
});
});
return Ember.RSVP.hash({
cars: carP,
planes: planeP,
bikes: bikeP,
pilots: pilotsP,
city: self.store.createRecord('city'),
owner: self.store.createRecord('owner'),
})
}
我的同一条路线的动作哈希包含
actions: {
save: function(){
var self = this;
return self._saveCity()
.then(self._getBikeRiders)
.then(self._getCarDrivers)
}
}
_saveCity: function(){
return this.currentModel.city.save();
},
_getBikeRiders: function(value){
},
_getCarDrivers: function(value){
}
当我调用函数时self._saveCity()
,它返回一个好的承诺,然后将解析后的值传递给函数,this._getBikeRiders
该_getBikeRiders(value)
函数有一个参数值,该参数值是从先前的承诺中收集的,在这种情况下保存城市,所以我们有城市名称。
现在,如果在_getBikeRiders(value)
函数中我需要对其他值做一些事情,我不能将任何东西传递给它。
示例
self._getBikeRiders(value,"some paramer)
没有通过两者。
我失去了函数内部的上下文,_getBikeRiders: function()
所以我无法访问它(我得到全局窗口)。
我不知道如何在这里实现这个 Ember.RSVP.Promise 可以接受上下文参数