2013-06-03 47 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