Smarty:不能两次使用相同的模板

时间:2013-09-27 07:36:55

标签: javascript php jquery smarty

我有以下Smary模板(它是文件树,文件是单独填充的,然后list_html被分配给geberated文件树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对话框中一个接一个地显示)。问题是第一次处理函数没问题,但是第二次点击处理程序不起作用。如果我从第一个对话框中删除树,则分配第二个中的处理程序。

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

提前谢谢!

PS。如果重要的话,我正在运行Smarty 3.1.13

1 个答案:

答案 0 :(得分:1)

如果模板使用两次,则文档中将有两个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>