2009-07-04 45 views
3

我有(至少)以下兩個字段的表單:供應額外的參數,以根據Zend框架自動完成

  • 國家
  • 俱樂部

該俱樂部是一個字段,它是通過生成的ZendX_JQuery_Form_Element_AutoComplete元素,該元素還生成以下javascript代碼:

$("#club").autocomplete({"url":"\/mywebsite\/\/mycontroller\/autocomplete"}); 

我有一個俱樂部每個國家的數據庫。我想要的是只有俱樂部返回給(用戶)給定的國家。此列表應通過遠程(ajax)調用檢索。該代碼是:

public function autocompleteAction() 
    { 
     $request = $this->getRequest(); 

     $filter = $request->getParam('q'); 
     $country = $request->getParam('country'); 

     $clublist = getClubListBySubstring($country, $filter); 

     $this->_helper->autoComplete($clublist); 
    } 

我也許可以改變上面的JavaScript代碼,繞過由ZendX_JQuery_Form_Element_AutoComplete完成的生成和增加額外的元素到被解釋爲參數國家的URL。

但有沒有更優雅的解決方案?我已經閱讀了一些關於ExtraParams的內容,這是否可行,以及如何工作?

回答

4

這是使用服務器生成Javascript的那些'灰色地帶'之一可能對您不利。自己編寫客戶端腳本將以多種方式使您受益:

  • 您將瞭解有關jQuery Autocomplete的更多信息,以及您可以使用它做什麼。
  • 您將更好地控制自動完成器的行爲。
  • 您的解決方案將不太依賴於Zend Framework,因此將更具可移植性。

在將ZendX_JQuery_Form_Element_AutoComplete作爲端到端解決方案之前,我會先熟悉addition parameters on the jQuery side of things。此外,您可能需要閱讀由Joel Spolsky的下面的文章題爲「漏抽象法」,如果你還沒有準備好:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

我實現了一個autocompleter(綁在ZF控制器動作),並完全知道ZF的自動完成助手的存在,但選擇不使用它,因爲我不想處於其中一種情況下,應用一個小調整將需要廢除整個解決方案,因爲代碼生成工具服務器不想玩。

希望比討厭更有幫助。

+0

謝謝關於文章的linek,我不知道它,但我同意的內容,我也練習它。但是我不得不在Zend Framework的抽象之前(特別是生成的Zend_Forms的佈局),但在大多數情況下並不是那麼好(重複)。我更喜歡'Zend Framework'的方式,因爲它大部分時間都很乾淨而且我不害怕依賴Zend Framework,因爲我的整個Web應用程序已經是這樣了,它爲我節省了大量時間來開發實用程序庫等等。 – Roalt 2009-07-05 07:57:30

相關問題