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 は、HTML 属性としても指定されているという点で、KnockOut と同様に機能します。Thymeleaf を th で修飾し、KnockOut を ko で修飾し、標準の HTML を修飾しないでおくとよいでしょう。

ありがとう!

4

2 に答える 2

3

Knockoutは、必要に応じてバインディングを取得するために使用できるカスタムバインディングプロバイダーをサポートします。これは現在公式には文書化されていませんが、 RyanNiemeyerのWebサイトで説明されています

これは、組み込みプロバイダーを拡張してのサポートを追加するバインディングプロバイダーです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 に答える