ошибка atk4 не может вырезать объект с именем =, он не был инициализирован

В agiletoolkit у меня отображается набор представлений, а в представлении я установил для внешнего div значение id=

  1 <div id='<?$_name?>' class='taskrow'>
  2   <div class=fleft nomargin>
  3     <?$Story?>
  4   </div>
  5   <div class='container'>
  6     <div id='<?$workspace?>' class='workspace'>
    ..
  34 </div>

На странице у меня есть цикл foreach, который извлекает данные из mysql и добавляет их на страницу. В то же время он сохраняет результат $p->add в массиве, используя идентификатор в качестве ключа.

     foreach ($st as $row) {
        if (is_array($row)) {
            $storyid=$row[0];
            $scrumrow[$storyid]=$p->add('View_StoryRow')
               ->setWorkspace('ws-'.$storyid);

Когда выполняется действие (перетаскивание элемента на экран), я обновляю страницу, и блок get применяет некоторые обновления к базе данных. Затем у меня есть следующий код для обновления представления (это строка, в которой было выполнено действие)

  if($_GET['task'] && $_GET['status'])
   {
          .. do database updates here ..
          $js[]=$scrumrow[$ajaxstory]->js()->reload();
  //      $js[]=$p->js()->reload(array('member'=>$member, 'sprint'=>$sprint));

          $this->js(null,$js)->execute();
   }

Если я закомментирую строку $scrumrow[$ajaxstory] и использую закомментированную строку для обновления всей страницы, это сработает, но очень медленно (около 12 секунд), так как на экране много данных, но при попытке обновить только просмотра, я получаю сообщение об ошибке, как в заголовке: «Невозможно вырезать объект с именем ... Он не был инициализирован.

введите здесь описание изображения

Обновления выполняются в базе данных, поэтому, если я обновляю страницу вручную, она работает, и ошибка появляется вместо строки, которую я хочу обновить, и дает правильное имя строки (как видно из идентификатора с использованием firebug), но что я пропустил? Как инициализировать объекты, которые уже есть на странице?


person Trevor North    schedule 25.06.2012    source источник
comment
Быстрый вопрос: if ($_GET[]... ) -- это помещается после цикла foreach? Я предполагаю, что это так, но просто чтобы убедиться, что это так.   -  person jancha    schedule 26.06.2012
comment
Да - это отдельный блок внутри функции init() { }. Если я изменю строку $js[] выше на закомментированную, это сработает, но это займет около 12 секунд, поэтому я хочу обновить только строку, а не все строки. Может ли это быть как-то связано с тем, как atk4 присваивает $_name, что в коде, возвращаемом ajax, он не дает тот же номер, поэтому идентификатор, сохраненный при первом создании страницы, отсутствует при его создании во второй раз?   -  person Trevor North    schedule 26.06.2012
comment
Вероятно, это потому, что вы теряете некоторые аргументы get. Попробуйте открыть Inspector и попытаться увидеть, какой URL-адрес используется для перезагрузки и чем он отличается от исходного. Сообщение об ошибке означает, что ваше представление не было инициализировано. Попробуйте открыть URL в новом окне и удалить cut_object, чтобы увидеть, что не так.   -  person romaninsh    schedule 28.06.2012


Ответы (1)


я добавил

$p->api->memorize('scrumrow',$scrumrow);

непосредственно перед блоком if ($-GET[]..), а затем добавляется

$scrumrow=$p->api->recall('scrumrow');

прежде чем я сделаю какое-либо заполнение $scrumrow на странице.

Он обновляет строку, поэтому это отвечает на исходный вопрос: когда ajax рисует часть страницы, он теряет массив и не восстанавливает его.

Это вызывает некоторые побочные эффекты, такие как перетаскивание, которое не выполняется повторно для новой строки, и, как ни странно, я также получил следующие ошибки при нажатии на любую из других страниц через ссылки меню после обновления строки ajax.

Ошибка низкого уровня: класс Model_Table не определен во включенном файле в include_once()

Думаю, я буду обновлять всю страницу (поскольку есть еще одна функциональная проблема с обновлением только строки), поэтому мне нужно выяснить, почему выполнение POST и GET занимает 12 секунд.

person Trevor North    schedule 26.06.2012
comment
Ошибка низкого уровня: класс Model_Table не определен во включенном файле в include_once(), это может произойти, если у вас где-то есть собственный Model/Table.php, и в нем нет фактического класса Model_Table. Кстати, ты на 4.2? Если нет, я бы предложил перейти на это как можно скорее. - person jancha; 27.06.2012
comment
Я заметил, что Romans вносит много изменений. Я загрузил 4.2, но видел несколько замечаний, таких как необходимость изменить типы базы данных для логических значений и макета формы, которые не работают в 4.2. Я пытаюсь довести свое приложение до версии выпуска, и мне нужно добавить функциональность, поэтому на данный момент мне не нужно возвращаться и вносить изменения в рабочий код. Обновление atk4 будет позже, когда у меня будет стабильное приложение на 4.1. - person Trevor North; 29.06.2012