emberjs 重置路由模型
emberjs resetting a routes model
我想在用户点击 table 上的排序 header 后重置路线上的模型:
import Ember from 'ember';
//import _ from 'lodash';
export default Ember.Route.extend({
needs: 'event-profile',
model: function(){
var parentmodel = this.modelFor('eventProfile').get('slug');
return this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20 });
},
actions: {
orderByStart: function(){
this.set('loading', true);
console.debug('order by start');
var _this = this;
var parentmodel = this.modelFor('eventProfile').get('slug');
this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20, sort: 'start' })
.then(function(model){
_this.set('loading', false);
_this.set('model', model);
});
}
}
});
orderByStart 被解雇了,我可以看到正在返回正确的数据,但是使用 _this.set('model', model);
设置模型似乎没有任何效果?
解决这个问题的正确方法是什么?
潜在的问题是您的操作处理程序在您的路线上,但您需要更改的模型 属性 在您的控制器上。快速的变化是调用controllerFor.
例如这个:_this.set('model', model);
变为:_this.controllerFor('my-route').set('model', model);
但是,将您的操作处理程序移至控制器本身可以更好地完成此操作。
import Ember from 'ember';
export default Ember.Controller.extend({
needs: 'event-profile',
loading : false,
actions: {
orderByStart: function(){
this.set('loading', true);
var _this = this;
var parentmodel = this.get('controllers.eventProfile.model.slug');
this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20, sort: 'start' })
.then(function(model){
_this.setProperties({ loading : false, model : model});
});
}
}
});
我想在用户点击 table 上的排序 header 后重置路线上的模型:
import Ember from 'ember';
//import _ from 'lodash';
export default Ember.Route.extend({
needs: 'event-profile',
model: function(){
var parentmodel = this.modelFor('eventProfile').get('slug');
return this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20 });
},
actions: {
orderByStart: function(){
this.set('loading', true);
console.debug('order by start');
var _this = this;
var parentmodel = this.modelFor('eventProfile').get('slug');
this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20, sort: 'start' })
.then(function(model){
_this.set('loading', false);
_this.set('model', model);
});
}
}
});
orderByStart 被解雇了,我可以看到正在返回正确的数据,但是使用 _this.set('model', model);
设置模型似乎没有任何效果?
解决这个问题的正确方法是什么?
潜在的问题是您的操作处理程序在您的路线上,但您需要更改的模型 属性 在您的控制器上。快速的变化是调用controllerFor.
例如这个:_this.set('model', model);
变为:_this.controllerFor('my-route').set('model', model);
但是,将您的操作处理程序移至控制器本身可以更好地完成此操作。
import Ember from 'ember';
export default Ember.Controller.extend({
needs: 'event-profile',
loading : false,
actions: {
orderByStart: function(){
this.set('loading', true);
var _this = this;
var parentmodel = this.get('controllers.eventProfile.model.slug');
this.store.find('listingEvent', { eventInstanceSlug: parentmodel, skip: 0, limit: 20, sort: 'start' })
.then(function(model){
_this.setProperties({ loading : false, model : model});
});
}
}
});