0

什么是重复渲染灰尘模板的最佳方法,同时让它在数据文件中前进它的引用,而不是每次都从头开始重复。例如:

假设我有一个 100 多人的列表,以 JSON 格式存储在一个名为data的变量中:

{
    "people": [
        {
            "name": "Jerry",
            "age": "17"
        },
        {
            "name": "Darcy",
            "age": "19"
        },
        {
            "name": "Jacob",
            "age": "25"
        },
        ... and so on for 100 or so people
    ]
}

我有这个template.tl文件,它导出一行三个名字/年龄:

<div class="row">
    <div>{name} - {age}</div>
    <div>{name} - {age}</div>
    <div>{name} - {age}</div>
</div>

我预编译成template.js

(function(){dust.register("template.tl",body_0);function body_0(chk,ctx){return chk.write("<div class=\"row\"><div>").reference(ctx.get(["name"], false),ctx,"h").write(" - ").reference(ctx.get(["age"], false),ctx,"h").write("</div><div>").reference(ctx.get(["name"], false),ctx,"h").write(" - ").reference(ctx.get(["age"], false),ctx,"h").write("</div><div>").reference(ctx.get(["name"], false),ctx,"h").write(" - ").reference(ctx.get(["age"], false),ctx,"h").write("</div></div>");}return body_0;})();

然后我有一个index.html文件,如下所示:

<html>
    <head>
    ...
    </head>

    <body>
        <div id="people"></div>

        <button id="load-more" type="button">Load More</button>
    </body>

    <script src="js/dust-core.min.js"></script>
    <script src="js/template.js"></script>
</html>

最好的方法是什么,所以每次单击按钮时,一行三个人将被附加到内部<div id="people"></div>,并且每次后续单击都会加载下一个 / 测试数据数组的末尾(可以假设根据我的需要,人数总是三的倍数)。

4

1 回答 1

1

将template.tl更改为:

<div class="row">
    {#.}
        <div>{.name} - {.age}</div>
    {/.}
</div>

更改模板有 2 个好处:

  • 您可以传入任意数量的people对象,而不仅仅是 3 个。
  • 如果数组中只剩下 2 个元素,它仍然会正确呈现。

执行渲染的 JavaScript:

$('#load-more').on('click', function(){
    var next3 = data.people.splice(0, 3);

    if(next3.length == 0){
        return; // Array is empty
    }

    dust.render('template.tl', next3, function(err, str){
        if(str){
            $('#people').append(str);
        }
    });
});

最重要的部分是data.people.splice(0, 3),这会从数组中删除 3 个元素并返回它们 - 请参阅Array.prototype.splice()

其余代码只是添加事件侦听器并插入呈现的模板的 JQuery。

JSFiddle

于 2014-05-15T17:41:20.730 回答