带有组的 jQuery 模板

标签 jquery jquery-templates

我正在尝试使用具有组 header 的 jQuery 模板插件来创建模板。 组标题事先未知,因为它是数据驱动的。我的模板是:

<div class='category'>${Category}</div>
<div class='service'><a service_id='${Id}'>${Name}</a></div>

我拥有的数据是:

var movies = [
    { Name: "Meet Joe Black", Category: "First", Id: 1 },
    { Name: "The Mighty", Category: "First", Id: 2 },
    { Name: "City Hunter", Category: "First", Id: 3 },
    { Name: "A movie", Category: "Second", Id: 4 },
    { Name: "Blade Runner", Category: "Third", Id: 5 }
];

我想要的输出是

<div class='category'>First</div>
<div class='service'><a service_id='1'>Meet Joe Black</a></div>
<div class='service'><a service_id='2'>The Mighty</a></div>
<div class='service'><a service_id='3' >City Hunter</a></div>

<div class='category'>Second</div>
<div class='service'><a service_id='4'>A movie</a></div>

<div class='category'>Third</div>
<div class='service'><a service_id='5'>Blade Runner</a></div>

我注意到如何正确设置模板来实现此目的。

最佳答案

您需要围绕数据进行旋转,如下所示:

var categories = {};
$.each(movies, function(i, m) {
    if(!categories[m.Category]) categories[m.Category] = [m];
    else categories[m.Category].push(m);
});

然后将模板设置为循环,例如:

<script id="mTemplate" type="text/x-jquery-tmpl">
    {{each(category, movies) $data}}
    <div class='category'>${category}</div>
        {{each(index, movie) movies}}
        <div class='service'><a service_id='${movie.Id}'>${movie.Name}</a></div>
        {{/each}}
    {{/each}}
</script>

然后,您只需调用模板并将该数据透视数据对象作为唯一参数传递,如下所示:

$("#mTemplate").tmpl(categories).appendTo("#output");

You can test it out here .


当然,更好的选择是在服务器端进行数据透视(并且可能使用整体数组以不同的格式......这将简化模板),不确定这是否是一个选项。

关于带有组的 jQuery 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303399/

相关文章:

jquery - Laravel 5.5 Ajax 注销无重定向

javascript - 无法将 id 发送到 javascript 函数

jquery - knockout 模板名称构建

jquery - 在 jQuery 模板中仅显示前 10 个

jquery - 如何使用 jQuery 模板设置日期/时间格式?

jQuery 放大镜不在图像之外

javascript - JQuery:获取原始输入值

javascript - 将用户重定向到屏幕顶部(智能手机)

Jquery 模板 - 嵌套 JSON(唯一键名)

knockout.js - 模板内的 knockout 绑定(bind)不起作用