4

オプションである必要がある行テンプレートを使用してカスタム バインディングを作成します。ユーザーがテンプレート ID を提供しない場合は、デフォルトの ID を使用したいのですが、本文のスクリプト タグに存在せず、オプション リテラルの単なる文字列です。

文字列をテンプレートとして使用するにはどうすればよいですか?

デフォルトのテンプレートは、このような非常に簡単なものでなければなりません

<span data-bind="text: name"></span>

ko.renderTemplate を試してみましたが、タグをスクリプト化するには ID しか必要ありません

ko.renderTemplate(template, bindingContext.createChildContext(data), null, row, "replaceChildren");

更新 この質問に関する通知を受け取ったところ、テンプレートを dom に挿入し、標準のスクリプト タグ プロバイダーを使用するという提案があったことがわかりました。ただし、これは、ユーザーがデフォルトのテンプレート ソースをオーバーライドできることを考慮していません (単一のプラージュ アプリケーションでの一般的なシナリオ。私はこの方法を使用します。最初にデフォルトのテンプレート プロバイダーを試してから、このような文字列テンプレート ソースにフォールバックします)。

var engines: {}
var renderTemplate = function (element, template, data, bindingContext) {
    var engine = engines[template];

    var success = false;
    do {
        try {
            ko.renderTemplate(template, bindingContext.createChildContext(data), engine, element, "replaceChildren");
            success = true;
            engines[template] = engine;
        } catch(err) {
            if (engine != null)
                throw "Template engine not found";

            engine = { templateEngine: stringTemplateEngine };
        }

    } while (!success)
};

完全なコードと stringTemplateEngine コードは、 https://github.com/AndersMalmgren/Knockout.Combobox/blob/master/src/knockout.combobox.js#L297にあります。

4

1 に答える 1

3

文字列からテンプレートをレンダリングするには、ここで説明されているようにカスタム テンプレート ソースを記述する必要があります。

お役に立てれば。

于 2012-05-31T22:21:34.223 に答える