2009-06-14 43 views
2

我試圖讓我的web應用程序的一些Ajax的功能,但我不能讓所有的拼圖適合:如何後臺找AjaxLink()在Zend中調用框架

我要添加鏈接,點擊後,將打開一個新的輸入(文本)字段,可由用戶填寫。在後端,我想做一些點擊鏈接的管理。

我想按照Zend Framework的原則去做,使用ajaxLink()的方法。任何人都可以爲我舉個例子嗎?我已閱讀官方文檔(ZendX_JQuery),但它不能完全幫助我。

我的前端(查看)代碼看起來像這樣;

<?= $this->ajaxLink("Subscribe", $this->url(array('controller' => 'mycontroller', 'action' => 'action1', 'id' => $event['id'])), 
             array("beforeSend" => "hide", 
               "update" => "#pb_" . $event['id'], 
               'noscript' => false, 
               'method' => 'POST')); ?> 

我的後端代碼如下所示。

public function action1Action() 
    { 
     if(!$this->loggedIn || ! $this->athlete) { 
      $this->_redirect('index'); 
     } 
     if(! $this->_request->isXmlHttpRequest()) 
     { 
      //The request was NOT made with JS XmlHttpRequest 
      die; 
     } 
     // Do some administration 
     // (removed to make this easier in this example) 

     $pb = new Zend_Form_Element_Text('PB'); 
     $pb->setLabel('PB:') 
        ->addValidator('StringLength', false, array(0,20)) 
        ->setRequired(false); 
     $renderText = $pb->render(); 

     return $renderText; 

    } 

我不斷收到錯誤,指出的方法想查找一個action1.phtml視圖腳本。我也不確定我是否試圖通過這種方式來生成表單輸入元素。

我在this question找到了一些答案,但它不是那麼優雅(需要一個額外的參數在鏈接,你需要另一個控制器),我不喜歡。

+0

你有沒有嘗試過的東西?你能向我們展示你的嘗試嗎? – 2009-06-14 08:15:27

回答

2

您需要關閉視圖解析器這個特定動作。默認情況下,ZF啓用一個名爲ViewRenderer的Action Helper,它將一個傳統命名的視圖腳本(在您的案例中爲action1.phtml)分配給特定的操作方法。由於您只是試圖返回一小段文本,而不是完整的網站視圖,因此不需要全視圖呈現。幸運的是,這很容易。

public function action1Action(){ 
    $this->_helper->viewRenderer->setNoRender(); 
    // the rest of your code 
} 

完整的文檔是在這裏: http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer

0

沒有什麼。你所要做的就是將它指向你的內容來自哪裏。在你看來:

<?= $this->ajaxLink("Example 1","/controller/action1", 
            array('update' => '#content', 
              'noscript' => false, 
              'method' => 'POST')); ?> 

在你的控制器:

echo 'Some Content'; 

閱讀:

http://www.mikaelkael.fr/IMG/pdf/ZendX_Framework_1.7.x_EN.pdf

+0

我遇到的問題是,名爲action1Action()的函數返回一個錯誤,指出「script'athlete/action1.phtml'找不到' – Roalt 2009-06-15 07:33:33

+0

您需要創建與您的控制器操作名稱匹配的視圖,因此如果你的控制器被稱爲AthleteController,你的動作被稱爲testAction(),你將需要創建一個運動員/ test.phtml – karim79 2009-06-15 08:35:00