2013-11-14 58 views
0

我繼承了一個使用Zend Framwork和Redbean Simple Model開發的Web項目,我對這些並不太熟悉。RedBean簡單模型隨機ID的

頁面似乎是動態生成以編輯實體。我面臨的問題是動態生成的頁面部分中的html元素似乎具有隨機生成的id屬性。每次我重新加載頁面時,元素都會有不同的ID。該ID的外觀像fo-1384467680734。

這對我來說是一個問題,因爲我無法編寫任何特定於某些DOM元素的CSS或任何jQuery代碼。也許有一種解決方案是爲我所針對的元素提供特定的CSS類,但我甚至不知道這是否可行。

有沒有人遇到過這個問題?你找到解決方案嗎?

開發該網站的原始公司不再維護它了,我的客戶要求我照顧它,並在其上修正一些事情。

UPDATE:

更具體的,有在網站上添加新零售商的形式。因此,零售商實體與數據庫中的零售商表相關。就我所瞭解的代碼而言,表格是根據類中的一些定義動態生成的(請參閱下面的代碼)。

正如您在代碼中看到的,零售商有一個省份和一個地區。在添加新零售商時,表單上會有下拉列表以選擇省份和地區。然而,這些下拉列表是「愚蠢的」,我想用一些jQuery讓它們更「智能」一些。我希望區域下拉列表僅顯示所選省份內的區域。通常這樣做對我來說不會有任何問題,除非我不知道如何訪問下拉列表。我需要他們有固定的ID或能夠分配他們的類,但我不知道如何在這種情況下做到這一點。

零售商定義:

Class Default_Model_retailers extends Appclass_Redbean_SimpleModel { 
    /* Db fields properties 

    */ 

    public $type = "retailers"; 
    public function getEntityModel() { 
     return $this; 
    } 

    public function getOrderClause() 
    { 
     return " 1 ORDER BY name ASC "; 
    }  

    public function getListColModel() 
    { 

     $cols = (array( 
      0 => (object) array('headerLabel' => 'Nom', 'fieldName' =>'name', 'width' => 110), 
      1 => (object) array('headerLabel' => 'Adresse', 'fieldName' => 'address_', 'width' => 110, 'type' => 'multiFields', 'fieldsList' => 'address.address2'), 
      //1 => (object) array('headerLabel' => 'Adresse', 'fieldName' => 'address', 'width' => 20),    
      2 => (object) array('headerLabel' => 'Code Postal', 'fieldName' =>'postcode', 'width' => 20), 
      3 => (object) array('headerLabel' => 'Province', 'fieldName' =>'province_id', 'width' => 50, 'type'=>'one2one', 'table.label'=>'provinces.abbrev'), 
      //3 => (object) array('headerLabel' => 'Province', 'fieldName' =>'province_id', 'width' => 50), 
      4 => (object) array('headerLabel' => 'Ville', 'fieldName' =>'city', 'width' => 50), 
      5 => (object) array('headerLabel' => 'Lat', 'fieldName' =>'latitude', 'width' => 50), 
      6 => (object) array('headerLabel' => 'Actions', 'fieldName' =>'actions', 'width' => 100)    
     )); 
     return $cols; 
    } 

    public function getDefinition() { 
     $exp = (object) array(
        'id' => (object) array(
         'label' => 'id', 
         'type' => 'refid' 
        ), 
        'name' => (object) array(
         'label' => 'Nom du revendeur', 
         'type' => 'text' 
        ), 
        'address' => (object) array(
         'label' => 'Adresse', 
         'type' => 'text' 
        ), 
        'address2' => (object) array(
         'label' => 'Adresse Ligne 2', 
         'type' => 'text' 
        ),    
        'city' => (object) array(
         'label' => 'Ville', 
         'type' => 'text' 
        ), 
        'province_id' => (object) array(
         'label' => 'Province', 
         'type' => 'select', 
         'subtype' => 'provinces', 
         'subtype_label' => 'name_fr' 
        ), 
        'region_id' => (object) array(
         'label' => 'Région administrative', 
         'type' => 'select', 
         'subtype' => 'regions', 
         'subtype_label' => 'name_fr' 
        ),    
        'phone' => (object) array(
         'label' => 'Tél. (XXX) XXX-XXXX ', 
         'type' => 'text' 
        ), 
        'postcode' => (object) array(
         'label' => 'Code Postal (XXXXXX)', 
         'type' => 'text', 
         'filter' => 'postcode' 
        ), 
        'contact' => (object) array(
         'label' => 'Personne Ressource', 
         'type' => 'text' 
        ),    
        'latitude' => (object) array(
         'label' => 'Latitude', 
         'type' => 'text' 
        ), 
        'longitude' => (object) array(
         'label' => 'Longitude', 
         'type' => 'text' 
        )    
     ); 
     return $exp; 
    } 

    public function getListEditDefinition() { 
     $exp = (object) array(
        'id' => (object) array(
         'label' => 'id', 
         'type' => 'refid' 
        ), 
        'name' => (object) array(
         'label' => 'Nom du revendeur', 
         'type' => 'text' 
        )    
     ); 

     return $exp; 
    } 

    public function getProvince() 
    { 
     $province = R::load('provinces', $this->province_id); 
     return $province; 
    } 
} 

也有相似的類全省和各地區的實體。我現在不會發布該代碼,不要讓這篇文章太重,但如果需要,我可以。

回答

0

首先,這個問題似乎更多地與HTML開發相關,然後與RedBean本身相關。元素的Id不一定必須是Bean-ID。其次我會爭論與CSS類,而不是ids,這樣你就可以利用多個元素的CSS樣式,或者至少爲其中的一些常用格式組。

沒有任何進一步的代碼,我想會有幫助你在這裏

UPDATE硬機會: 我沒有與Zend框架的工作還沒有,但它使用的部件或類似的創建元素。所以你提供的Model定義了一個Widget的一般屬性。既然你說你正在創建下拉框,也許在某個地方的代碼這樣的通道存在:

$retailer = new Zend_Form_Element_Select('retailer'); 
or 
$retailer = $form->addElement('select', ...); 

所以快速谷歌搜索想出了喜歡的東西下面來設置ID:

$retailer->setAttrib('id', 'retailerBox'); 
$retailer = $form->addElement('select', 'attribs' => array(
          'id'=>'retailerBox', 
         ), ...); 

下面是我發現的幾個環節這可能幫助你與你的任務

Zend_Form QuickStart

Zend Form Decorators

+0

問題是我不知道如何爲這些動態生成的HTML元素分配類,也不知道如何爲它們分配特定的ID。你知不知道怎麼?查看我原始帖子中的更新。我添加了一些關於我想要做什麼和一些代碼的細節。 –

+0

可悲的是我沒有進入Zend框架,但看看我修改後的答案,也許它會幫助你得到一種感覺尋找什麼 – zewa666