我目前正在与Arraycontroller和它的模型进行斗争。如果存储中的数据发生变化,则不会发生任何更改。特别是如果记录被附加到商店,我希望处理这些条目的数组控制器与存储一起更新。我以为有一些数据库,但似乎并不是这样。
假设我有这样的路线:/#/institute/10/user-administration
研究所的模型看起来像
App.Institute = DS.Model.extend({
name: DS.attr('string'),
users: DS.hasMany('user', {async:true})
});这就是我如何设置Arraycontroller模型的方法:
App.UserAdministrationRoute = Ember.Route.extend({
model : function() {
// get users from the current institute
return this.modelFor('institute').get("users").then(function(users) {
return users.filter(function(item, index, enumerable){
// filter anonymous dummy users
return item.get('name') != "~dummy~";
});
});
}
});在UserAdministration-Controller中,我做的是
App.UserAdministrationController = Ember.ArrayController.extend({
needs: ['institute'],
actions : {
createNewUser : function() {
var newUser = this.store.createRecord('User', {
role : 0
});
this.transitionToRoute('user-administration.edit', newUser);
}
}
});在user-administration.edit路由中,我使用this.get('model').save();保存用户
但是ArrayController不会用刚刚在商店中创建和保存的记录来更新。我想也许有一种方法可以将控制器模型连接到filter上,但是我如何定义过滤器来定义ArrayController的模型。
谢谢你在这方面的帮助。
发布于 2014-08-08 03:32:12
经过更多的思考和对这个问题的关注,我可以自己解决这个问题。实际上,ArrayController并没有真正绑定到商店,因为我没有将store.filter设置为模型。
为了实现always控制器始终与存储的数据同步,我必须将过滤器定义为模型。在我的路线上的模型定义现在看起来像这样,工作起来就像一个字符!
App.UserAdministrationRoute = Ember.Route.extend({
model : function() {
var scope = this;
return this.modelFor('institute').get("users").then(function(){
return scope.store.filter('user', function(user){
return user.get('name') != "~dummy~";
});
});
}
});对数据的过滤和查询有很大的区别,我只需要意识到:我应该使用查询还是筛选器来搜索记录?
https://stackoverflow.com/questions/25156067
复制相似问题