2013-03-13 70 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與KnockOut的工作方式類似,因爲它也被指定爲HTML屬性。如果Thymeleaf具有合格的KnockOut,並且不符合標準HTML,那將是很好的。

謝謝!

+0

FWIW,讓他們不使用Thymelead/XHTML DOCTYPE,轉而使用HTML5 DOCTYPE我改變了我的更新HTML文件。現在所有的工作都很好(除了KnockOut不合格!)。 – Muel 2013-03-13 00:38:03

回答

3

淘汰賽支持,可用於但是你想找回綁定自定義綁定提供。這目前沒有正式記錄,但是是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); 
    } 
}); 

例如:`<!DOCTYPE HTML>`:http://jsfiddle.net/mbest/vSQkW/

+0

太棒了,非常感謝! – Muel 2013-03-14 06:26:28

1

按照knockoutjs支持論壇,這是不支持,預計不會在未來被支持

KO forums

+0

不是我希望的答案,但無論如何,謝謝! (我發誓我一直在谷歌搜索了大約一個小時尋找這個...良好的鏈接!) – Muel 2013-03-13 00:16:46

+0

這是一箇舊的職位。 Knockout現在支持可用於以任何您想要的方式檢索綁定的自定義綁定提供程序。 – 2013-03-13 02:00:49

+0

@MichaelBest沒有看到任何文件。我知道自定義綁定,但仍然使用數據綁定。你能說出你的意思嗎?如果你有什麼我肯定會讚揚答案 – 2013-03-13 02:15:25