0

我希望能够限定我的 XHTML 文档中的 KnockOutJS 属性。

这是我想做的事情:

<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 符合 th,KnockOut 符合 ko,而标准 HTML 不符合标准。

谢谢!

4

2 回答 2

3

Knockout 支持自定义绑定提供程序,可用于根据需要检索绑定。这目前没有正式记录,但在 Ryan Niemeyer 的网站上有所描述

这是一个绑定提供程序,它扩展了内置提供程序以添加对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);
    }
});

使用示例:http: //jsfiddle.net/mbest/vSQkW/

于 2013-03-13T02:24:41.497 回答
1

根据knockoutjs支持论坛的说法,这个不支持,预计以后也不会支持

KO论坛

于 2013-03-13T00:06:54.883 回答