Получить индекс в jquery tmpl

Нет, это не повторение этот вопрос... хотя и немного связанный, поэтому я буду использовать код из этого 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-хаба. Этот код немного выше моего понимания, у меня мало времени, и понимание этой библиотеки не входит в рамки моих текущих проектов;)


person user406905    schedule 12.12.2010    source источник
comment
немного странно нужен временный представитель   -  person Eric Fortis    schedule 14.12.2010
comment
ха. ну, вы не можете добавить награду, если у вас не менее 75... в любом случае, я сам ответил на вопрос. так что не надо голосовать...   -  person user406905    schedule 14.12.2010


Ответы (2)


OK пришлось изменить библиотеку шаблонов. см. эту ссылку для исправления github.

строка 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;
person user406905    schedule 14.12.2010

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

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

person user406905    schedule 16.12.2010