我想知道如何在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框架编程”。因此,对不起,如果这是一个愚蠢的问题。
答案 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)。