如何更新zf2视图

时间:2013-06-03 08:42:47

标签: jquery zend-framework2

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

所以这是故事,我展示了一个表(仅供参考,这是一个计划),当人们点击“下个月”/“上个月”等链接时,我想在此表中插入一些元素。等等我想,“嘿,我可能只是再次召唤我的行动,有了争论,这样做我甚至会避免重建整个桌子,我只是从我的数据库中获取”下个月“/”上个月“的信息”。 但是代码很奇怪,表在访问页面时第一次正确构造自己,但是当我尝试单击“nextmonth”/ 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, I'm a test !!!
//rest of the view code

我搜索了一个refreshView()方法,但没有找到任何方法。我当然是以错误的方式做到这一点,在盒子外面想太多,但我没有看到其他方法去做。任何帮助将不胜感激,非常感谢阅读那篇长篇文章。

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

2 个答案:

答案 0 :(得分: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。在互联网上快速搜索引导我学习本教程。你可以在那里找到你的答案: http://samsonasik.wordpress.com/2012/10/11/zend-framework-2-using-zend-form-and-ajax/

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

答案 1 :(得分:0)

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

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

像魅力一样工作。但是我可能还会遗漏一些东西,稍后我会仔细看看。我现在必须继续前进:/。 感谢Tounu的暗示(不能投票给你抱歉,需要15个声誉blablabla)。