knockout.js 使用嵌套模板绑定获取消息时,Knockout模板绑定出现问题:意外的标记“)”

1yjd4xko  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(111)

我已将knockout和jquery版本升级到3.5.1,但遇到以下问题
未捕获的语法错误:无法处理绑定““模板:函数(){return {名称:“节模板”,foreach:节,模板选项:{删除节:删除节,打开添加文档对话框:打开添加文档对话框}} }”消息:意外的标记“)”
当我们使用嵌套模板时,敲除库有什么问题吗?

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js"></script>
    <script src="https://knockoutjs.com/downloads/jquery.tmpl.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"></script>

</head>
<body>

    <div data-bind="template: { name: 'items', data: breakfast, templateOptions: { header: 'Breakfast Items', message: 'Wake up to these delicious items!', class: 'breakfast' } }"></div>

    <script id="items" type="text/html">
        <h3>${$item.header}</h3>
        <div class="${$item.class}">
            {{each $data}}
            <p>
                <span class="name">${name}</span>
                <span class="price">${price}</span>
            </p>
            {{/each}}
        </div>
        <p><em>${$item.message}</em></p>
        <hr />
        <div data-bind="template: { name: 'items2', data: newItems, templateOptions: { header: 'New Items', message: 'Wake up to these delicious items!', class: 'breakfast'} }"></div>

    </script>
    <script id="items2" type="text/html">
        <h3>${$item.header}</h3>
        <div class="${$item.class}">
            {{each $data}}
            <p>
                <span class="name">${name}</span>
                <span class="price">${price}</span>
            </p>
            {{/each}}
        </div>
        <p><em>${$item.message}</em></p>
        <hr />

    </script>

    <script type="text/javascript">
        var viewModel = {
            breakfast: [
                { name: "toast", price: 2.50 },
                { name: "pancakes", price: 4.00 },
                { name: "eggs", price: 3.25 }],

            newItems: [
                { name: "Oats", price: 2.50 }],
        };

        ko.applyBindings(viewModel);
    </script>

</body>
</html>

特别是当我使用嵌套模板item 2时出错
请帮我一把,先谢谢了

ruarlubt

ruarlubt1#

在模板中使用templateOptions似乎有一个问题。从项目模板中删除它可以使它工作。为了解决这个问题,我建议为模板创建一个视图模型,其中包含需要传入的属性,而不是使用templateOptions。
还要注意,要访问newItems属性,需要将$root而不是breakfast属性传递给第一个模板绑定。
我知道这不是一个修复,但希望有助于您的调试。
第一个

重要提示

此外,还提供了一个关于从knockout documentation - Note 6-
请注意,截至2011年12月,jQuery.tmpl已不再处于开发阶段。我们建议使用Knockout的原生基于DOM的模板(即foreach、if、with等绑定),而不是jQuery.tmpl或任何其他基于字符串的模板引擎。

仅使用敲除js并删除jquery.tmpl

下面的代码不再需要jquery.tmpl,而只使用knockoutjs语法作为解决问题的另一种方法。
第一个

相关问题