1

我认为我的问题来自将 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。

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 回答