0

テキストフラグメントにバインディングを適用する最良の方法は何ですか?

次のコードで ip を取得しました。

var textFragment = '<div><p data-bind="text: text"></p></div>',
    htmlTemplate = ko.utils.parseHtmlFragment(textFragment);

ko.applyBindings({
    text: "text"
}, htmlTemplate[0]);

alert(htmlTemplate[0].innerHTML);
document.getElementById("test").innerHTML = htmlTemplate[0].innerHTML;

(フィドラー)

これにより、dom ノードが作成され、バインディングが適用され、ページに挿入されます。ノックアウトコードを投げてみたところ、テンプレートをレンダリングするための関数がいくつかあることがわかりました。それらのメソッドがよりうまく機能するかどうか疑問に思っています。それらを使用しようとしましたが、結果のコードは長くなり、期待どおりに機能しませんでした。

よろしく、ステファン

(注: これは、私の問題を示すための単純なデモにすぎません。カスタム バインディング ハンドラーで使用しています)。

4

1 に答える 1

1

デフォルトのソース エンジンをオーバーライドしたいようです。

//string template source engine
var stringTemplateSource = function (template) {
    this.template = template;
};

stringTemplateSource.prototype.text = function () {
    return this.template;
};

var stringTemplateEngine = new ko.nativeTemplateEngine();
stringTemplateEngine.makeTemplateSource = function (template) {
    return new stringTemplateSource(template);
};

その後、次のようにデフォルトのエンジンとして使用できます

ko.setTemplateEngine(stringTemplateEngine);

または、次のようなカスタム バインディングの特定のテンプレートに使用します。

var myTemplate = '<div><p data-bind="text: text"></p></div>';
ko.renderTemplate(myTemplate, bindingContext.createChildContext(valueAccessor()), { templateEngine: stringTemplateEngine }, element, "replaceChildren");
于 2013-06-10T12:01:10.537 に答える