オプションである必要がある行テンプレートを使用してカスタム バインディングを作成します。ユーザーがテンプレート 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にあります。