2013-06-03 46 views
0

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

所以这里是故事,我展示了一个表格(FYI,这是一个计划),并且当人们点击像“下个月”/“prev month”等链接时,我想在此表格中插入一些元素。所以我想,“嘿,我可能会再次打电话给我的行动,有一个争论,这样我甚至会避免重建整个表格,我只会从我的数据库中获得”下个月“/”前月“信息” 。 但是,代码行为奇怪,表访问页面时第一次正确构建自身,但当我尝试点击“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

确定,samsonik教程安慰我的想法是没有正确的刷新方法。所以我避开了这个问题。我觉得有点哑了没有想到的这个早期... 我只是修改了JS更迭部分:

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

就像一个魅力。但我可能仍然错过了一些东西,稍后我会仔细看看。我必须现在继续:/。 感谢提示Tounu(不能投票给你抱歉,需要15声望blablabla)。

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(重新加载页面)。

目前,你要显示你的视图模型对象被“储存”在您的testReturn变量。到目前为止,在ZF2中没有使用AJAX,但我认为你做错了:p。在互联网上快速搜索引导我到这个教程。你可在那里找到答案: http://samsonasik.wordpress.com/2012/10/11/zend-framework-2-using-zend-form-and-ajax/

这大约是一个形式,所以你的情况应该是比较容易;)

+0

我已经尝试过类似 如果($ MOD == NULL) $ tableRes = “teeeeeeeeeeeest”; else $ tableRes = NULL; 但该视图不刷新。 PS:我会尝试使用请求对象。 – aramir

+0

见我的编辑,我挂你的教程,可以帮助;) – Tounu

+0

OK,我会读这一点,回来后让你知道,如果我设法得到它的工作。感谢您的支持。 – aramir