2012-03-11 97 views
3

我需要建立一个jQuery模板,它有一个月的下拉列表和一个月的下拉日期。对于我来说,为了让我可以用{{each}}语法构建选项,我必须在每个JSON模型项目中包含一个月份列表和一个日期列表,这些值的值为1到31。jQuery的模板可以有一个for循环

我已经看到了你怎么可以添加的内部动态数组{{每个}}在另一个答案: Can I declare local/temp variables within a jQuery template?

我可能只用值定义里面,一个阵列1至31但即使这样,有点冗长。有没有更好的方式在jQuery模板中做循环?

我大概可以找到一些日期对象来迭代日期特定的情况,但是有关非循环用例的非日期呢?

我想不使用外部的全局变量在模板体完全限定的回路。使用全局变量,我可以轻松使用{{each}}。

回答

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); 

感谢由罗埃尔克拉默斯的textarea标签的样本: http://blog.sterkwebwerk.nl/2010/12/15/custom-jquery-template-tags-1/

还查看jquery.tmpl源定义每个标签的帮助很大。

默认值为循环迭代1次。这里是你如何定义一个模板体使用它:

<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/

+0

抬起头,那提琴似乎不工作了。 – 2016-01-25 02:57:57

+0

小提琴可能无法正常工作,因为jQuery模板已过时。这个答案在这里是为了历史目的。使用另一个模板引擎,如jsRender。 – 2016-07-31 14:22:19