1

私の問題は、既存の DOM スクリプト テンプレートがプリコンパイルされる "jquery.tmpl.1.0.0pre.js" で Knockout.js を使用したことにあると思いますか? 私は外部のhtmlテンプレートをページに送り込む方法を理解しようとしています(私はこれを行いました)が、Knockout.jsを使用してそれらを使用する方法も見つけようとしています(現在、エラーで失敗しています)。すべての ajax 呼び出しが完了しました。

私が行った手順は次のとおりです。

私の最初のステップ: インライン HTML テンプレートを Javascript に移動しました。これは、Knockout.js を含めてうまく機能しました。

$('#templates').append(
    '<script type="text/x-jquery-tmpl" id="DDLTmpl">' +
        '<select data-bind="options:options(),value:$item.data.value,' +
        'optionsCaption:caption(),optionsText:\'text\',optionsValue:\'value\'">'+
        '</select>' +
    '</script>');

2 番目のステップ: 同じドメインの別のファイルから同じ H​​TML を読み込み、DOM に挿入しました。

$.ajax({
    url: '/somewhere/Tmpl.htm',
    data: {},
    success: function(data) {
        $('#templates').append(
            $('<script type="text/x-jquery-tmpl" id="Tmpl" />').html(data)
         );
    },
    dataType: 'html'
});

これは成功しましたが、Knockout で「不正な文字」エラーが発生しまし');if(typeof(\'$\' + fns.fM)!=='undefined' && (\'$\'た。DOM の 2 つのテンプレートを見ると、1 つは次のようにエンコードされています。

{{ko_code ((function() { return ko.templateRewriting.applyMemoizedBindings...

2 つ目は、html が期待どおりに div にカット アンド ペーストされたかのように表示されます。

テンプレートを事前にコンパイルする必要がありますか? Knockout.js で動作するようにテンプレートをエンコードするにはどうすればよいですか?

次のステップは、jquery.tmpl.1.0.0pre.js 依存関係を削除し、ネイティブの Knockout.js テンプレート エンジン (またはdoT ) を使用することです。現在、Knockout 2.1.0.js を使用しています。

4

1 に答える 1

2

代わりにテンプレート ソースを定義する組み込みの方法を使用すると、はるかに簡単になります。

Ryan の良い記事があります。 http://www.knockmeout.net/2011/10/ko-13-preview-part-3-template-sources.html

または、KO Combobox バインディングでどのようにそれを行ったかを確認することもできます

https://github.com/AndersMalmgren/Knockout.Combobox

于 2013-01-15T13:35:30.407 に答える