Как получить динамические идентификаторы в привязке данных foreach для сортируемого аккордеона

Привет, я хочу использовать сортируемый аккордеон ( http://jqueryui.com/accordion/) вместе с knockout-js "data-bind: foreach"-loop.

Для каждого цикла my потребуется уникальный идентификатор, но как мне сгенерировать его для обработки jQuery?

Knockoutcode:

self.Tasks = ko.observableArray(); // has TaskId, Taskname, Description...

HTML-Accordian:

        <div id="accordion" data-bind="foreach: Tasks">
            <div id="THIS HAS TO BE DYNAMICALLY GENERATED???" class="group">
                <h3><b><span data-bind="text: Taskname"></span></b></h3>
                <div>
                    <textarea name="Description" data-bind="value: Description"></textarea>
                </div>
           </div>
        </div>

Javascript это:

$(function() {

    $( "#accordion" )
      .accordion({
          header: "> div > h3"  
      })
      .sortable({
        axis: "y",
        handle: "h3",
        stop: function( event, ui ) {
            var items=[];
            ui.item.siblings().andSelf().each( function(){
                //compare data('index') and the real index
                if($(this).data('index')!=$(this).index()){
                    items.push(this.id);
                }
            });
            // IE doesn't register the blur when sorting
            // so trigger focusout handlers to remove .ui-state-focus
            ui.item.children( "h3" ).triggerHandler( "focusout" );
            // Print out the sequence of tasks for further processing
            if(items.length) $("#sequence").text(items.join(',')); 
            ui.item.parent().trigger('stop');
        } 
    })
    .on('stop',function(){
          $(this).siblings().andSelf().each(function(i){
              $(this).data('index',i);
          });
      })
      .trigger('stop');
  });

Часть меня говорит мне, что это должно быть легко, но я явно не в силах понять это. У кого-нибудь есть хорошая идея?

1 ответ

Решение

Вы можете использовать ключевое слово $index().

Хотя я не уверен в синтаксисе, что-то вроде приведенного ниже кода может поставить вас на правильный путь

<div id="accordion" data-bind="foreach: Tasks">
        <div data-bind="attr : {'id': $index()}" class="group">
            <h3><b><span data-bind="text: Taskname"></span></b></h3>
            <div>
                <textarea name="Description" data-bind="value: Description"></textarea>
            </div>
       </div>
    </div>

Как указано ниже с помощью TaskId

<div id="accordion" data-bind="foreach: Tasks">
        <div data-bind="attr : {'id': TaskId}" class="group">
            <h3><b><span data-bind="text: Taskname"></span></b></h3>
            <div>
                <textarea name="Description" data-bind="value: Description"></textarea>
            </div>
       </div>
    </div>
Другие вопросы по тегам