Получить индекс в JQuery TMPL - PullRequest
2 голосов
/ 13 декабря 2010

Нет, это не повторение этого вопроса ... хотя и немного связано, поэтому я буду использовать код из этого Q для сравнения.

Я пытаюсь получить индекс из вложенного шаблона, используя тег {{tmpl}} . Использование тега 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>

Я не хочу использовать грязный способ сделать это - я бы предпочел изменить библиотеку, если это возможно. У любого есть идеи, где текущая библиотека может быть изменена для поддержки этой функции - источник git hub . Этот код немного у меня над головой, у меня мало времени, и понимание этой библиотеки не входит в сферу моих текущих проектов;)

Ответы [ 2 ]

3 голосов
/ 14 декабря 2010

ОК пришлось изменить шаблон lib. см. эту ссылку для github patch.

строка 150-155 оригинала (текущая версия) jquery.tmpl.js

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;
0 голосов
/ 16 декабря 2010

Я также узнал о другой технике, которая может или не может работать для вашего сценария ...

вы можете использовать jQuery.inArray , чтобы получить индекс из родительского объекта данных - при условии, что вы поддерживаете синхронизацию родительского объекта данных.

...