0

在敏捷工具包中,我显示了一组视图,并且在视图中,将外部 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>

在页面中,我有一个从 mysql 检索数据并将其添加到页面的 foreach 循环。同时,它将$p->add的返回值存储到一个数组中,以id为key。

     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 的 ID 所示)但是我错过了什么?如何初始化页面中已有的对象?

4

1 回答 1

1

我添加了

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

就在 if ($-GET[]..) 块之前,然后添加

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

在我对页面中的 $scrumrow 进行任何填充之前。

它确实更新了行,因此这回答了原始问题 - 当 ajax 正在绘制页面的一部分时,它会丢失数组并且不会重建它。

它确实会导致一些副作用,例如没有为新行重新执行拖放操作,而且奇怪的是,在 ajax 行刷新后通过菜单链接单击任何其他页面时,我也遇到了以下错误。

低级错误:类 Model_Table 未在 include_once() 的包含文件中定义

认为我会坚持刷新整个页面(因为只有刷新行存在另一个功能问题)所以我需要弄清楚为什么执行 POST 和 GET 需要 12 秒。

于 2012-06-26T09:39:38.790 回答