2013-03-13 2 views
0

내 XHTML 문서의 KnockOutJS 속성을 정규화 할 수 있기를 원합니다.XHTML의 KnockOutJS 속성 (XML 네임 스페이스 사용)

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:th="http://www.thymeleaf.org" 
     xmlns:ko="http://knockoutjs.com"> <!-- Supply the KnockOutJS namespace here --> 
    <head> 
    <script th:src="@{/js/lib/knockout-2.2.1.js}" src="../../js/lib/knockout-2.2.1.js"></script> 
    <!-- Remainder omitted... --> 
    </head> 
    <body> 
    <p> 
     My name is: 
     <span ko:data-bind="text: name"></span><!-- Problem line - KnockOut will ignore data-bind when it's qualified --> 
    </p> 
    </body> 
</html> 

KnockOutJS대로 작동하지 않습니다 위의 예는 자격을 갖춘 ko:data-bind을 무시 : 여기

는 내가하고 싶은 것입니다. 분명히, 제가 ko:을 제거하면 작동합니다.

KnockOutJS에게 자격이 있다는 것을 알려주고 한정자가 무엇인지 알려줄 수 있습니까? 내가 KnockOutJS을 한정하려는

이유는 속성은 다음과 같습니다

  1. 확인. 정의되지 않은 속성에 대한 많은 유효성 경고 (IDE에서)가 발생합니다.
  2. 투명도. Thymeleaf는 서버 측 템플릿을 위해 Thymeleaf를 사용하며, HTML 속성으로도 지정된다는 점에서 KnockOut과 유사하게 작동합니다. Thymeleaf를 th로, KnockOut를 ko로, 그리고 표준 HTML을 무조건으로 유지하는 것이 좋을 것입니다.

고마워요!

+0

FWIW, 내 HTML 파일을 업데이트 변경되었습니다. 모든 것이 잘 작동하고 있습니다 (KnockOut은 자격이 없음을 제외하고!). – Muel

답변

3

개편, 당신이 원하는 그러나 바인딩을 검색하는 데 사용할 수있는 사용자 지정 바인딩 제공을 지원

KO forums 미래에 지원 될 것으로 예상되지 않는다 . 현재 공식적으로 문서화되어 있지는 않지만 described on Ryan Niemeyer's web site입니다.

여기에는 ko:data-bind에 대한 지원을 추가하기 위해 기본 제공 공급자를 확장하는 바인딩 공급자가 있습니다. '`: 사용의

var originalNodeHasBindings = ko.bindingProvider.instance.nodeHasBindings; 
var originalGetBindings = ko.bindingProvider.instance.getBindings; 
ko.utils.extend(ko.bindingProvider.instance, { 
    nodeHasBindings: function(node) { 
     if (node.nodeType == 1 && node.hasAttribute('ko:data-bind')) 
      return true; 
     return originalNodeHasBindings.call(this, node); 
    }, 
    getBindings: function(node, bindingContext) { 
     if (node.nodeType == 1 && node.hasAttribute('ko:data-bind')) 
      return this.parseBindingsString(node.getAttribute('ko:data-bind'), bindingContext, node); 
     return originalGetBindings.call(this, node, bindingContext); 
    } 
}); 

예 : 그들은 HTML5의 DOCTYPE을 사용하는 대신 Thymelead/XHTML의 DOCTYPE을 사용하지 않도록 http://jsfiddle.net/mbest/vSQkW/

+0

대단히 감사합니다. – Muel

1

는 knockoutjs 지원 포럼에 따르면,이 지원되지 않으며

+0

내가 대답하고 싶지 않았지만 어쨌든 고마워! (나는 약 1 시간 동안 인터넷 검색을했는데 맹세했다. 좋은 링크!) – Muel

+0

그건 옛날 글이다. 이제 녹아웃은 원하는 방식으로 바인딩을 검색하는 데 사용할 수있는 사용자 지정 바인딩 공급자를 지원합니다. –

+0

@MichaelBest 해당 문서가 보이지 않습니다. 사용자 지정 바인딩을 알고 있지만 데이터 바인딩을 여전히 사용합니다. 당신이 의미하는 것을 보여줄 수 있습니까? 당신이 뭔가를 가지고 있다면 나는 확실히 대답을 upvote –