2014-12-01 2 views
0

Я использую пятно сетки для отображения списка элементов. Список заполняется с использованием $.ajax звонка в jquery-ui dialog box.scrollRowIntoView не работает в диалоговом окне jquery-ui

У меня есть требование прокрутить до позиции ранее выбранного элемента. Поэтому я использую следующую функцию для прокрутки и выбора ранее выбранного пункта:

function SetDefaultItemSelected() { 

     var selectedKey = 16; // hardcoded but there is logic to get previous item 

     for (var rowIndex = 0; rowIndex < myItemDataView.getLength(); rowIndex++) { 
      var gridRow = myItemDataView.getItem(rowIndex); 
      if (gridRow.Key === selectedKey) { 
       myItemGrid.setSelectedRows([rowIndex]); 

       //TODO: check why the scrollRowIntoView is not working 
       myItemGrid.scrollRowIntoView(rowIndex); 
       break; 
      } 
     } 

Выход что-то вроде этого:

(Есть 22 строк в общей сложности, и я уже выбран 16-й ряд) Я не уверен, почему он скрывает верхние 3 строки и не прокручивается до 16-й строки.

Slick Grid with data populated

UPDATE 1:

Просто проверить, что если добавить кнопку и связать его щелчок событие с указанной выше функции, прокрутка волшебно работает. Но, я не уверен, что я делаю неправильно при вызове функции сразу после создания сетки? Пожалуйста, помогите.

Может ли быть ошибка, поскольку функциональность работает на странице, но не в диалоговом окне jquery-ui?

UPDATE 2:

Я создал новое приложение MVC3 и пытался реализовать то же самое - Called функции LoadData на $ .ajax и заселена пятно сетки, а затем попытался выбрать идентификатор по умолчанию.

Я понял, что проблема возникает, только если сетка находится в диалоговом окне jquery-ui. Такая же сетка на странице работает нормально.

Может ли быть ошибкой, что пятно сетки прокрутки работает на странице, а не в диалоговом окне, загруженном вызовом ajax?

Пожалуйста, помогите и дайте мне знать, если мне нужно поделиться образцом кода.

UPDATE 3:

Добавлен пример кода. Любая помощь приветствуется!!

https://groups.google.com/forum/#!topic/slickgrid/CUjY3H1F_zM

ответ

0

РЕШЕНИЕ:

Здравствуйте все,

Там есть 2 JQuery Ajax звонки в моем примере кода (прилагается в Google группах ссылки в UPDATE 3 в вопросе):

1) .load() для загрузки пустого jquery-диалога PartialView

2) .ajax() вызвал на файл document.ready файла partialView.js, чтобы загрузить слабые данные сетки. (Частичный просмотр.js указан в PartialView.cshtml)

При попытке много вещей, я обнаружил, что когда я ставлю debugger; как раз перед 2 .ajax() вызова и передал эту точку отладки в панели инструментов разработчика Chrome, проблема не опоздавшая.

Итак, я удалил debugger; и мысль о введении задержки 500 мс

window.setTimeout(functionToBeDelayed, requiredDelay);

и функциональность стали вести себя, как ожидалось.

Я все еще не уверен, как эти вложенные вызовы ajax вызывают проблему. Но на данный момент задержка в 500 мс сделала для меня.

На данный момент применение обходного пути, но определенно с нетерпением ждет лучшего решения.

Смежные вопросы