2013-04-28 4 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

+0

콘솔에서 '바인딩을 구문 분석 할 수 없습니다'라고 말하면 바인딩 구문이 잘못되었을 수도 있습니다. 나는 바인딩에 params와 기능을 가질 수 있는지 모르겠다. 'isInRole'은 다음과 같은 구조를 가지고 있습니다 :'function (param) {return true; }' – Pejman

+0

전체 오류 메시지를 게시하십시오! 또한보기 모델 코드가 도움이 될 것입니다 ... 귀하의 코드가 작동해야하기 때문에 : http://jsfiddle.net/kuY5E/1/ – nemesv

답변

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을 확인할 수 있습니다 . 뷰 모델의 역할을 "editor"또는 "admin"이 아닌 다른 것으로 변경하면 메시지가 사라집니다.

관련 문제