【问题标题】:Can a jquery template have a for loopjquery模板可以有for循环吗
【发布时间】:2012-03-11 15:04:09
【问题描述】:

我需要构建一个 jQuery 模板,其中包含一个月下拉菜单和一个月中的某天下拉菜单。对我来说,必须在我的每个 JSON 模型项中包含一个月份列表和一个日期列表(其值为 1 到 31)似乎有点过头了,这样我就可以使用 {{each}} 语法构建选项。

我在另一个答案中看到了如何在 {{each}} 内添加动态数组: Can I declare local/temp variables within a jQuery template?

我可能只在其中定义一个值 1 到 31 的数组。但即使这样也有点冗长。有没有更好的方法在 jquery 模板中执行 for 循环?

我可能可以找到一些日期对象来迭代特定日期的情况,但是与日期无关的 for 循环用例呢?

我希望在模板主体中完全定义循环而不使用外部全局变量。通过全局变量,我可以轻松使用 {{each}}。

【问题讨论】:

    标签: jquery jquery-templates


    【解决方案1】:

    我找到了如何向 jquery 模板添加另一个标签。这是 for 标签定义。在你的脚本引用 jquery 和 jquery.tmpl.js 之后添加这个:

    (function ($) {
    $.extend(jQuery.tmpl.tag, {
        "for": {
            _default: {$2: "var i=1;i<=1;i++"},
            open: 'for ($2){',
            close: '};'
        }
    });
    })(jQuery);
    

    感谢 Roel Kramers 提供的 textarea 标签示例: http://blog.sterkwebwerk.nl/2010/12/15/custom-jquery-template-tags-1/

    同时查看 jquery.tmpl 源代码中的每个标签的定义也很有帮助。

    默认是 1 次迭代的 for 循环。以下是定义模板主体以使用它的方法:

    <script id="TestTemplate" type="text/x-jQuery-tmpl">
        Day:<br/>
        <select name="DayOfMonth">
            {{for(i=1;i<=31;i++)}}
            <option value="${i}">${i}</option>
            {{/for }}
        </select>
    </script>​
    

    这是一个 jsFiddle 页面,可以看到它的实际效果: http://jsfiddle.net/mjlang/qvzdV/

    【讨论】:

    • 请注意,那个小提琴似乎不再起作用了。
    • 小提琴可能不起作用,因为 jQuery 模板已过时。在这一点上,这个答案是出于历史目的。使用另一个模板引擎,例如 jsRender。
    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 2013-04-09
    • 2016-06-19
    • 1970-01-01
    • 2012-07-25
    • 2012-01-07
    • 2014-06-01
    • 1970-01-01
    相关资源
    最近更新 更多