您的位置:首页 > 其它

Ember的一些高级应用场景解决方案

2014-02-17 15:07 260 查看
1.一个route中包含多个请求.

官方给出的路由的例子,都是一个路由的model方法中一个请求,有很多情况,我们需要有多个请求,那怎么办呢?

很简单,model方法的规则是返回一个promise对象或者直接的对象或数组。那么我们可以利用Ember.RSVP.all,或者jQuery里的$.when, 他们都是实现类似功能的,多个promise对象全部执行完成时才执行then里的内容。

这里大家如果不懂,请自行研究Promise/A规范。

ResourceMgr.ResourceStrategyRoute = Ember.Route.extend({
model: function(params){
var allStrategies = this.store.find("strategy");
var resourceStrategies = this.store.find("strategy", {
resourceId: resourceId
});

return Ember.RSVP.all([allStrategies, resourceStrategies]).then(function(datas){
return datas;
});
},
setupController: function(ctrl, model){
ctrl.set("allStrategies", model[0]);
ctrl.set("resourceStrategies", model[1]);
}
});


2.异步计算属性

这种用法我自己研究出来的,觉得很好用,分享给大家。

注意:这种计算属性只能用于模版中,因为模版会自动更新。如果你想在自己写的js中或者这个异步属性,就有限制,不能在请求返回前使用。不过这种情况很少遇到。大多情况下,可以安全使用。如果真的遇到在js中获取的这个属性值与预期不符,那还是在route的model方法中去返回,setupController方法中赋值吧。

app.UserIndexController = Ember.Controller.extend({
users: Ember.computed(function(key, value){
if(arguments.length == 2){
return value;
}else{
var ctrl = this;
ctrl.store.find("user",{
dept: "某部门"
})
.then(function(response){
ctrl.set("users", response );
});
return [];
}
})
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: