【发布时间】:2015-10-23 05:29:17
【问题描述】:
我在尝试使用复选框来确定是否存在一对多关系时遇到了问题。
我有一个包含 userId、modelId、privilegeId 和 scopeId 的 userPrivilege 表。
我正在尝试显示显示用户是否具有权限的复选框。为此,我需要检查多个条件,而不仅仅是一个简单的布尔字段。
我可以使用异步函数来确定用户是否具有权限,但我只是不知道如何将其分配给“已选择”复选框。返回承诺意味着复选框始终处于选中状态。从 Promise 中返回值总是不选中。
请看下面我正在尝试的东西的 sn-p...
复选框组件:
export default Ember.Component.extend({
user: null,
model: null,
privilege: null,
scope: null,
selected: function() {
return this.get('authorization').hasAuthorization(
this.get('user.id'),
this.get('model'),
this.get('privilege'),
this.get('scope')).then(function(result) {
return result;
});
}.property()
})
服务:
export default Ember.Service.extend({
hasAuthorization: function(userId, model, privilege, scope) {
var store = this.get('store');
return new Ember.RSVP.Promise(function (resolve, reject) {
store.find('user', userId).then(function (user) {
user.get('userPrivileges').then(function (userPrivileges) {
userPrivileges.find(function (userPrivilege, index, userPrivileges) {
userPrivilege.get('model').then(function (_model) {
if (_model.get('name') === model) {
userPrivilege.get('privilege').then(function (_privilege) {
if (_privilege.get('name') === privilege) {
userPrivilege.get('scope').then(function (_scope) {
if (_scope.get('name') === scope) {
resolve(true);
}
});
}
});
}
});
});
});
});
});
}
});
编辑:根据评论,我现在尝试了链接,但现在 _privilege 和 _scope 在不满足 if 语句时未定义(因为没有返回承诺)。我认为使用其他结构可以做得更好,我只需要弄清楚如何。
这现在可以工作了,只是如果权限不存在,它不会解析为 false:
return new Ember.RSVP.Promise(function (resolve, reject) {
store.find('user', userId).then(function (user) {
if (!user) {
return resolve(false);
}
return user.get('userPrivileges');
}).then(function(userPrivileges) {
if (!userPrivileges) {
return resolve(false);
}
userPrivileges.forEach(function (userPrivilege) {
userPrivilege.get('model').then(function (_model) {
if (_model.get('name') === model) {
return userPrivilege.get('privilege');
}
}).then(function (_privilege) {
if (_privilege.get('name') === privilege) {
return userPrivilege.get('scope');
}
}).then(function (_scope) {
if (_scope.get('name') === scope) {
console.log('true: ' + model + ' ' + privilege + ' ' + scope);
return resolve(true);
}
}).catch(function(error) {
});
});
});
});
【问题讨论】:
-
你知道你可以链而不是嵌套承诺吗?
-
@Gaurav,谢谢你。我对这一切都很陌生,所以我不知道链接。感谢您的提示。
标签: javascript ember.js checkbox