如何保存Zend_Dojo_Form_Element_ComboBox的id而不是文本

时间:2011-04-01 21:32:32

标签: zend-framework dojo

任何人都可以告诉我如何在Zend中保存Dojo ComboBox元素的ID。对不起,如果这很简单,但我无法找到答案。

我的组合框代码如下

  // Create a autocomplete input for counties
  $county = new Zend_Dojo_Form_Element_ComboBox('county');
    $county->setLabel('County');
      $county->setOptions(array(
      'autocomplete' => true,
      'storeId'   => 'countyStore',
      'storeType' => 'dojo.data.ItemFileReadStore',
      'storeParams' => array('url' => "/clients/client/autocomplete"),
      'dijitParams' => array('searchAttr' => 'county')))
        ->setRequired(true)
        ->addValidator('NotEmpty', true)
        ->addFilter('HTMLEntities')            
        ->addFilter('StringToLower')        
        ->addFilter('StringTrim');

我的autocompleteAction的代码如下

public function autocompleteAction()
 {
// disable layout and view rendering
$this->_helper->layout->disableLayout();
$this->getHelper('viewRenderer')->setNoRender(true);

// get list of breed names from the breeds table
 $qry= Doctrine_Query::create()
    ->from('PetManager_Model_Counties c');

    $result=$qry->fetchArray();

   //generate and return JSON string countiesID being the primary key of the table
   $data = new Zend_Dojo_Data('countiesID',$result,'countiesID');
   echo $data->toJson();
 }

表单是用于保存新客户端的输入表单。它操作的表有一个引用表县的字段县,因此只接受Int值。

我想要保存县'countiesID'的主键,从Dojo ComboBox中选择的主键,目前只传递选定的文本,即'Dublin'而不是'10',这当然会在我尝试时抛出异常保存记录。

我知道如何使用标准的组合框来创建一个函数来查询counties表并使用foreach数组通过addMultiOption将主键和县名添加到表单但是我可以弄清楚如何在使用Dojo自动完成组合框时执行此操作。

1 个答案:

答案 0 :(得分:1)

我实际上是在Zend社区的帮助下对此进行了分类。

您实际上必须使用FilteringSelect而不是ComboBox来保存记录ID,如下所示

// Create a autocomplete select input for counties
    $county = new Zend_Dojo_Form_Element_FilteringSelect('county');
    $county->setLabel('County');
    $county->setOptions(array(
      'autocomplete' => true,
      'storeID'   => 'countyStore',
      'storeType' => 'dojo.data.ItemFileReadStore',
      'storeParams' => array('url' => "/clients/client/autocomplete"),
      'dijitParams' => array('searchAttr' => 'county')))
        ->setRequired(true)
        ->addValidator('NotEmpty', true)
        ->addFilter('HTMLEntities')            
        ->addFilter('StringToLower')        
        ->addFilter('StringTrim');

我希望这可以帮助ZendNewbie和其他任何对框架有兴趣的人。