【发布时间】:2017-03-29 23:41:55
【问题描述】:
在我的 KncokoutJS ViewModel 中,我有以下计算属性:
self.SelectedUserHasRoles = ko.computed(function () {
if (self.isLoaded()) {
return self.selectedUser().roles().length > 0;
}
return false;
});
在我的 HTML 中,我有以下内容:
<!-- ko if: isLoaded() -->
<!-- ko if: !SelectedUserHasRoles -->
<div>
<p>User has no Roles.</p>
</div>
<!-- /ko -->
<!-- ko if: SelectedUserHasRoles -->
<div class="roles-wrapper" data-bind="foreach: $root.selectedUser().roles()">
<div class="role-token" data-bind="text: Name"></div>
</div>
<!-- /ko -->
<!-- /ko -->
在我的代码中,我是这样说的:
如果来自 AJAX 调用的数据已经完成加载(isLoaded 为真),那么对于当前选择的用户,检查他/她是否有任何角色。 如果是,则遍历它们并显示它们,如果不是,显示一些文字说“用户没有角色”。 p>
除了显示 User has no Roles 文本 sn-p 之外,一切似乎都可以正常工作。我不知道为什么没有显示!我在我的计算属性中设置了断点,并且可以看到当我选择一个没有角色的用户时,表达式(在控制台窗口中)为假,我正在否定它,所以我应该看到那个文本sn-p!
我做错了什么?我创建了一个screencast 让事情更容易理解。
【问题讨论】:
-
可能是 CSS 问题,即文本显示在别处?
-
你确定
self.selectedUser().roles()不为空吗? -
不,当我添加一个用户时,我也调用了
setCurrentUser(user)函数,你可以see here 认为.roles()是一个空数组,这是新添加的用户所期望的。跨度>