我需要构建一个jQuery模板,该模板具有月份下拉列表和月份下拉日期。对于我来说,必须在我的每个JSON模型项中包含月份列表和日期列表似乎有点过分,因为我可以使用{{each}}语法构建选项。
我已经在另一个答案中看到了如何在{{each}}中添加动态数组: Can I declare local/temp variables within a jQuery template?
我可能只是在其中定义一个值为1到31的数组。但即使这样也有点冗长。有没有更好的方法在jquery模板中执行for循环?
我可能会找到一些日期对象来迭代日期特定情况,但是与循环用例相关的非日期呢?
我希望在模板体中完全定义循环而不使用外部全局变量。使用全局变量,我可以轻松使用{{each}}。
答案 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/