在jquery tmpl中获取索引

时间:2010-12-12 23:37:34

标签: javascript jquery jquery-templates

不,这不是this question的重复......虽然有点相关,所以我将使用该Q中的代码进行比较。

我试图使用{{tmpl}} tag从嵌套模板中获取索引。使用tmlp标记很像{{each}}标记,就像上面链接的问题一样,但$ index属性不存在。

<script id="answerTable" type="text/x-jquery-tmpl">
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
     {{tmpl(answersObj) '#answers' }}
    </table>
</script>

<script id="answers" type="text/x-jquery-tmpl">
    <tr>
        <th><input type="radio" name="group1" value="---!INDEX HERE!---" /></th>
        <td>${AnswerText}</td>
    </tr>
</script>

我不想用凌乱的方式来做这件事 - 如果可能的话我宁愿修改lib。任何人都有任何想法可以修改当前的lib以支持此功能 - git hub source。这个代码有点过头了,我的时间很短,理解这个lib不在我当前的项目范围内;)

2 个答案:

答案 0 :(得分:3)

确定必须修改模板库。 有关github补丁,请参阅this link

jquery.tmpl.js原始(当前版本)的第150-155行

ret = jQuery.isArray( data ) ?
        jQuery.map( data, function( dataItem ) {
        return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
        }) :
        [ newTmplItem( options, parentItem, tmpl, data ) ];
return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;

修改为支持$ index

ret = jQuery.isArray( data ) ?
        jQuery.map( data, function( dataItem, index ) {
        if(dataItem){dataItem.$index = index;}
        return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null;
        }) :
        [ newTmplItem( options, parentItem, tmpl, data ) ];
return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret;

答案 1 :(得分:0)

我还学到了另一种可能适用于您的场景的技术......

您可以使用 jQuery.inArray 从父数据对象获取索引 - 假设您保持父数据对象同步。