Knockout.js:如何预编译字符串模板以插入DOM(ko_code)才能正常工作?

时间:2013-01-15 05:52:54

标签: knockout.js jquery-templates

我认为我的问题来自于将Knockout.js与“jquery.tmpl.1.0.0pre.js”一起使用,其中现有的DOM脚本模板已预编译?我正在试图弄清楚如何将外部html模板输入页面(我已经完成),但也让Knockout.js使用它们(当前失败并出现错误。)顺便说一下,我正在应用Knockout绑定后所有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>');

第二步:我从同一个域的单独文件中加载了相同的HTML并将其插入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中的两个模板,其中一个用以下代码编码:

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

并且第二个看起来好像html被切割并按预期粘贴在div中。

我是否需要预编译模板?我如何编码模板以使用Knockout.js?

我的下一步是删除jquery.tmpl.1.0.0pre.js依赖项并使用本机Knockout.js模板引擎(或doT。)我目前正在使用Knockout 2.1.0.js.

1 个答案:

答案 0 :(得分:2)

使用内置的定义模板源的方式,更容易。

Ryan有一篇很好的文章,http://www.knockmeout.net/2011/10/ko-13-preview-part-3-template-sources.html

或者你可以查看我是如何为我的KO Combobox绑定做的那样

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