以下是我写过的模型的代码:
export default Ember.Route.extend({
orgs: [],
superOrgRecord: null,
getsuperOrg: Ember.computed('orgs', function () {
var super_org = this.get('orgs').findBy('name', 'test org');
var super_org_record = this.store.peekRecord('org', super_org.id);
for (var i = 0; i < super_org.users.length; i++) {
var super_org_user = this.store.createRecord('user', { name: super_org.users[i].name,
org: super_org_record });
for (var j = 0; j < super_org.users[i].roles.length; j++) {
super_org_user.get('roles').addObject(this.store.createRecord('role', { name: super_org.users[i].roles[j].name }));
}
}
this.setProperties({superOrgRecord: super_org_record});
return super_org_record;
}),
redirect: function() {
var user = this.modelFor('application').user;
if(Ember.isEmpty(user.get('auth')) || Ember.isEmpty(user.get('org').get("id"))){
this.transitionTo('login');
}
},
beforeModel: function() {
var _this = this;
return ajax({
url: _this.modelFor('application').url + '/org_user_list.json/?auth_token=' + _this.modelFor('application').user.get('auth'),
type: 'get',
}).then(
function(result) {
_this.setProperties({
orgs: result,
});
},
function(error) {
alert(error.jqXHR.responseText);
}
);
},
model: function() {
return Ember.RSVP.hash({
orgs: this.get('orgs'),
superOrg: this.get('getsuperOrg')
});
},
// TODO I thought this would fix duplicating the super org records but it didn't
// deactivate: function() {
// if (this.superOrgRecord) {
// this.superOrgRecord.get('users').forEach( function(user) {
// user.get('roles').forEach( function(role) {
// this.store.unloadRecord(role); // also tried deleteRecord()
// });
// this.store.unloadRecord(user);
// });
// }
// },
actions: {
error(error) {
if (error.message === "Cannot read property 'id' of undefined") {
this.redirect();
} else {
return;
}
}
// TODO I thought this would fix duplicating the super org records but it didn't
// willTransition(transition) {
// if (this.superOrgRecord) {
// this.superOrgRecord.get('users').forEach( function(user) {
// var roleObjects = user.get('roles');
// user.get('roles').removeObjects(roleObjects);
// });
// var userObjects = this.superOrgRecord.get('users');
// this.superOrgRecord.get('users').removeObjects(userObjects);
// }
// return true;
// }
}
});
计算属性getsuperOrg
正确完成其工作。每次加载此路由时都会运行(在model
方法中)。现在,当我从这个模型转换时,我想删除对我刚刚添加到商店的这些user
和role
对象的所有引用,因为它们只是暂时的,用于返回模型调用生成的值(您可以质疑我这样做的原因,现在让我们假设它必须以这种方式完成)。当我重新加载这个模型时,最终会在商店中复制这些项目,并在以后混淆我的组件的渲染结果。我还在代码中注明了(已注释掉),有两种不同的技术尝试使用deactivate
和willTransition
完成此操作。两者都执行时没有错误,但实际上都没有完成工作 - 当我再次加载此模型第二次或以后时,继续呈现其他users
和roles
。
请帮忙;感谢。
答案 0 :(得分:1)
我认为您正在寻找的是store.unloadAll(<type>)
这将从商店
<type>
的所有记录