0

我想知道如何在 zend 框架 2 中更新视图。我想我可以这样做,只需再次调用构建视图的 Action 即可。但这似乎不起作用。

所以这就是故事,我展示了一个表格(仅供参考,这是一个计划),当人们点击“下个月”/“上个月”等链接时,我想在这个表格中插入一些元素。所以我想, “嘿,我可能会再次调用我的操作,并带有一个参数,这样做我什至会避免重建整个表,我只会从我的数据库中获取“下个月”/“上个月”信息”。但是代码的行为很奇怪,表格在第一次访问页面时会正确构建,但是当我尝试单击“下个月”/etc 链接时,视图不会自行更新。但同样,使用 JS 函数成功,我可以看到该操作被正确调用并返回应该显示的正确更新视图......但没有显示,它仍然是原始视图。

一小段代码可以帮助您理解:

创建视图的操作:

public function projectAction( )
{
    $mod=$_POST['mod'] ;

    if ( $mod == NULL )
    {   
        //create and populate $tableRes
    }

    else // mod != NULL
    {
         echo "fooooooooooooo, I'm a test !!!" ;
        //modify $tableRes using mod value 
    }


    $viewModel = new ViewModel(array(
                                     'projectTable' => $tableRes ,
                                    )
                              ) ;
    $viewModel->setTerminal(true);

    return $viewModel ;
}

风景:

<?php echo $this->headScript()->prependFile($this->basePath() . '/js/projet_b_JS/animation.js')
                              ->prependFile($this->basepath() . '/js/projet_b_JS/projectListener.js')
?>

<table id="projectTable">
<caption> Tableau Projet </caption>
<?php
    //print the projectTable/$tableRes table
?>
</table>

<a onClick='rigTable(-1)'> prev Month </a> <a onClick='rigTable(+1)'> next Month </a> <br />
<a onClick='rigTable(-12)'> prev Year </a> <a onClick='rigTable(12)' > next Year </a> <br />

AJAX 调用:

//inside animation.js
function rigTable ( $mod )
{
  $.ajax({ type : 'POST',
    url : './application/project/project',
    data : { mod : $mod } ,
    success : function ( testReturn )
          {
             alert(testReturn) ;
          },
          error : function ()
         {
                 alert("error from rigTable JS function <br />") ;
         }
      }) ;
}

因此,当我单击时,会弹出一个警报并告诉我以下内容:

fooooooooooooo,我是一个测试!
//其余的视图代码

我搜索了 refreshView() 方法,但没有找到。我当然是以错误的方式做这件事,跳出框框思考太多,但我看不到其他方法。任何帮助将不胜感激,非常感谢您阅读那篇长文。

PS:我还是zf2框架的新手,还不太习惯“MVC框架编程也没有”。因此,对不起,如果这是一个愚蠢的问题。

4

2 回答 2

1

首先,不要那样做:

$mod=$_POST['mod'] ;

如果要获取 POST 变量,请使用 Request 对象! https://zf2.readthedocs.org/en/latest/modules/zend.http.request.html

所以你会有类似的东西

$mod=$this->getRequest()->getPost('mod');

对于你的错误,这听起来很奇怪......我认为这可能是你的 $tableRes 算法的问题。尝试传递一个字符串只是为了测试视图实际上是“刷新”的。

就像是 :

if($mod!=NULL){
  $tableRes="blablabla";
}
else{
  $tableRes=array().....
}

如果它确实打印了表格而不是字符串,那么这可能会很复杂:p。

编辑:嗯,我读得太快了。您希望使用 AJAX 刷新您的表格吗?我建议您先尝试不使用 AJAX(重新加载页面)。

目前,您想要显示的 Viewmodel 对象“存储”在您的 testReturn 变量中。到目前为止在 ZF2 中没有使用 AJAX,但我认为你做错了:p。在 Internet 上快速搜索后,我找到了本教程。你可以在那里找到你的答案: http ://samsonasik.wordpress.com/2012/10/11/zend-framework-2-using-zend-form-and-ajax/

这是关于一个表格,所以你的情况应该更容易;)

于 2013-06-03T09:05:14.660 回答
0

好的,samsonik 教程安慰我没有正确的刷新方法。所以我绕过了这个问题。我觉得有点愚蠢,因为之前没有想到这一点......我只是将我的 JS 成功部分修改为:

success : function ( testReturn )
 {
    $('#project').html(testReturn) ;
 },

奇迹般有效。但我可能仍然遗漏了一些东西,稍后我会仔细看看。我现在必须继续前进:/。感谢 Tounu 的提示(抱歉,不能投票给你,需要 15 个声望 blablabla)。

于 2013-06-03T09:46:38.680 回答