jquery模板可以有for循环吗?

时间:2012-03-11 15:04:10

标签: jquery jquery-templates

我需要构建一个jQuery模板,该模板具有月份下拉列表和月份下拉日期。对于我来说,必须在我的每个JSON模型项中包含月份列表和日期列表似乎有点过分,因为我可以使用{{each}}语法构建选项。

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

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

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

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

1 个答案:

答案 0 :(得分:13)

我已经找到了如何在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/