Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在XHTML中限定KnockOutJS属性(通过XML名称空间)_Javascript_Knockout.js_Xml Namespaces - Fatal编程技术网

Javascript 在XHTML中限定KnockOutJS属性(通过XML名称空间)

Javascript 在XHTML中限定KnockOutJS属性(通过XML名称空间),javascript,knockout.js,xml-namespaces,Javascript,Knockout.js,Xml Namespaces,我希望能够限定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

我希望能够限定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属性的原因是:

  • 验证。我(在IDE中)收到很多关于未定义属性的验证警告
  • 清晰。我们(很少)使用Thymeleaf作为服务器端模板,Thymeleaf的工作原理与KnockOut类似,因为它也被指定为HTML属性。让Thymeleaf通过th认证,淘汰赛通过ko认证,而让标准HTML不通过认证,这将是一件好事

  • 谢谢

    根据knockoutjs支持论坛,这是不受支持的,预计将来也不会支持


    根据knockoutjs支持论坛,这是不受支持的,预计将来也不会支持


    Knockout支持自定义绑定提供程序,可用于根据需要检索绑定。这一点目前还没有正式记录,但确实存在

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

    用法示例:

    Knockout支持自定义绑定提供程序,可用于按需检索绑定。这一点目前还没有正式记录,但确实存在

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

    用法示例:

    这不是我所希望的答案,不过还是要谢谢你!(我发誓我已经在谷歌上搜索了大约一个小时,寻找这个……好链接!)这是一篇老文章。Knockout现在支持自定义绑定提供程序,可用于以任何方式检索绑定。@MichaelBest未看到任何相关文档。我知道自定义绑定,但它们仍然使用数据绑定。你能说明你的意思吗?如果你有什么事,我一定会把票投给你answer@ben336把被接受的答案从你身上转移到迈克尔·贝斯特身上。希望你不介意!这不是我想要的答案,不过还是要谢谢你!(我发誓我已经在谷歌上搜索了大约一个小时,寻找这个……好链接!)这是一篇老文章。Knockout现在支持自定义绑定提供程序,可用于以任何方式检索绑定。@MichaelBest未看到任何相关文档。我知道自定义绑定,但它们仍然使用数据绑定。你能说明你的意思吗?如果你有什么事,我一定会把票投给你answer@ben336把被接受的答案从你身上转移到迈克尔·贝斯特身上。希望你不介意!FWIW,我更改并更新了我的HTML文件,使它们不使用Thymelead/XHTML DOCTYPE,而是使用HTML5 DOCTYPE:
    。现在一切都很顺利(除了淘汰是不合格的!)。FWIW,我更新了我的HTML文件,使它们不使用Thymelead/XHTML DOCTYPE,而是使用HTML5 DOCTYPE:
    。现在一切都很顺利(除了淘汰赛不合格!)。