Knockout js"IF"绑定到接收参数并返回布尔值的函数

Pej*_*man 4 knockout.js

我希望能够基于一系列说出的角色名来显示或隐藏某些DOM元素.问题是我想检查html中的角色或角色.

就像是:

<div data-bind="if: isInRole('Admin', 'Editor')">
Run Code Online (Sandbox Code Playgroud)

要么

<div data-bind="if: isInRole(['Admin', 'Editor'])">
Run Code Online (Sandbox Code Playgroud)

以上解决方案似乎对我不起作用.有什么建议/选择吗?

Jer*_*oen 5

@nemesv发表评论:您的问题中可能没有显示错误或问题.尽管如此,这里的设置可以帮助您找到并修复您遇到的错误.

您的方法签名IsInRole与输入参数不一致,输入参数是一组角色.如果你改变它IsInAnyRole可能会变得更清楚,这样的事情应该工作得很好:

<div data-bind="if: isInAnyRole(['admin', 'editor'])">Protected div!</div>
Run Code Online (Sandbox Code Playgroud)

使用以下视图模型:

var vm = function() {
    var self = this;

    self.roles = ko.observableArray(["editor", "user"]);

    self.isInAnyRole = function(targetRoles) {
        return targetRoles.some(function(el) { return self.roles().indexOf(el) !== -1; });
    }
};
Run Code Online (Sandbox Code Playgroud)

您可以查看这个小提琴,以获得上述演示.如果将视图模型的角色更改为"编辑器"或"管理员"以外的其他内容,则消息将消失.