聪明:不能两次使用同一个模板


Smarty: cannot use the same template twice

我有以下 Smary 模板(它是一个文件树,文件被单独填充,然后list_html分配给 geberated file tree hrml)

<script>
    $("#directory-list-root").on("click", "div.content", function() {
        $("div.selected", "#directory-list-root").removeClass("selected");
        $(this).addClass("selected");
        // Check if directory is expanded
        var node = $(this).parent("li.directory");
        if (node.hasClass("expanded")) {
            node.removeClass("expanded");
            $(this).siblings("ul.container").hide();
        } else {
            node.addClass("expanded");
            $(this).siblings("ul.container").show();
        }
    } );
</script>
<div id="directory-list-root">
    <ul class="container" style="padding:5px" id="tree">
{$list_html}
    </ul>
</div>

代码中,它被使用了两次(在逐个显示的 jquery-ui 对话框中)。问题是第一次处理功能是可以的,但对于第二次点击处理程序不起作用。如果我从第一个对话框中删除树,则会分配第二个对话框中的处理程序。

你知道如何解决这个问题吗?

提前谢谢你!

如果这很重要,我正在运行 Smarty 3.1.13

如果模板使用两次,文档中将有两个 id directory-list-root的元素,这是非法的。结果是事情不会奏效。

不要使用固定 id,

而是通过每次递增内部计数器变量来使用动态 id,例如使用 {counter}

<script>
    $(function() {
        {counter name=tree assign=uniqueId}
        var $root = $("#directory-list-root-{$uniqueId}");
        $root.on("click", /* etc */);
    });
</script>
<div id="directory-list-root-{$uniqueId}">
    <ul class="container" style="padding:5px" id="tree">
{$list_html}
    </ul>
</div>