【发布时间】:2017-08-30 03:45:10
【问题描述】:
在 KnockoutJs 中,我正在处理的管理页面有以下 ViewModel:
function UsersViewModel() {
var self = this;
self.users = ko.observableArray([]);
self.roles = ko.observableArray([]);
$.post('http://localhost:23926/admin/acl/getroles',
function(data) {
const availableRoles = $.map(data,
function(role) {
return new Role(role);
});
self.roles(availableRoles);
},
'json');
$.post('http://localhost:23926/admin/acl/getuserroles',
function(data) {
const usersWithRoles = $.map(data,
function(userWithRole) {
return new User(userWithRole);
});
self.users(usersWithRoles);
},
'json');
self.selectedUser = ko.observable(self.users[0]);
// operations
self.setCurrentUser = function (user) {
self.selectedUser(user);
}
self.SelectedUserHasRoles = ko.computed(function() {
return self.selectedUser().roles().length > 0;
});
}
在我的 HTML 中,我有以下内容:
<div class="col-md-6" data-bind="if: $root.SelectedUserHasRoles()">
<h4><i class="fa fa-shield" aria-hidden="true"></i> Roles</h4>
<hr />
<div id="roles-wrapper" data-bind="foreach: $root.selectedUser().roles">
<div class="role-token" data-bind="text: name"></div>
</div>
</div>
我认为这应该可行!我想说:
如果所选用户有角色,则循环遍历并显示每个角色
如果可行,我会在左侧看到用户,在右侧看到所选用户的角色:
以上似乎不起作用,我不知道为什么!我得到错误:
第 343 行是这里的返回:
self.SelectedUserHasRoles = ko.computed(function() {
return self.selectedUser().roles().length > 0;
});
我做错了什么?
【问题讨论】:
-
您应该在链接到您的
posts调用的.done()函数中初始化您的selectedUser -
就是这样!谢谢@cl3m