2013-04-28 36 views
3

我希望能够基于一组所谓的角色名称来显示或隐藏某些DOM元素。问题是我想检查一下html中的角色或角色。Knockout js“IF”绑定到接收参数并返回布尔值的函数

喜欢的东西:

<div data-bind="if: isInRole('Admin', 'Editor')"> 

<div data-bind="if: isInRole(['Admin', 'Editor'])"> 

上述解决方案似乎并没有为我工作。任何建议/选择?

+2

如何定义'inInRole',它返回什么?你是什​​么意思“似乎不适合我”?您的浏览器JS控制台中是否有错误? – nemesv 2013-04-28 11:33:59

+0

控制台说'无法解析绑定',我想也许绑定语法是错误的。我不知道你是否可以使用params绑定funcs。 'isInRole'具有这样的结构:'function(param){return true; }' – Pejman 2013-04-28 11:44:04

+0

请发布完整的错误信息!此外,您的视图模型代码将是有益的...因为您的代码应该工作:http://jsfiddle.net/kuY5E/1/ – nemesv 2013-04-28 11:48:29

回答

5

@nemesv的评论很有用:您可能在代码中出现错误或问题,但您未在问题中显示。尽管如此,这里有一个设置可以帮助您找到并解决您遇到的错误。

您的方法签名IsInRole与输入参数(它是一个角色数组)不一致。如果您更改到IsInAnyRole事情可能会变得更加清晰,这样的事情应该只是罚款:

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

用下面的视图模型:

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; }); 
    } 
}; 

您可以为上面的演示退房this fiddle 。如果您将视图模型的角色更改为“编辑器”或“管理员”以外的内容,则该消息将消失。