RedBean简单模型随机id

时间:2013-11-14 22:50:27

标签: php jquery zend-framework css-selectors redbean

我继承了一个使用Zend Framwork和Redbean Simple Model开发的Web项目,我对它们并不太熟悉。

页面似乎是动态生成的,用于编辑实体。我面临的问题是动态生成的页面部分中的html元素似乎具有随机生成的id属性。每次重新加载页面时,元素都会有不同的id。 id的外观像fo-1384467680734。

这对我来说是一个问题,因为我无法编写任何特定于某些DOM元素的css或任何jquery代码。也许一个解决方案是给我定位的元素提供特定的css类,但我甚至不知道这是否可行。

有没有人遇到过这个问题?你找到了解决方案吗?

开发该网站的原始公司不再维护它,我的客户要求我处理它并修复一些事情。

更新

更具体地说,网站上有表格可以添加新的零售商。因此,有一个零售商实体与数据库中的零售商表相关。据我所知,从代码中可以根据类中的某些定义动态生成表单(参见下面的代码)。

正如您在代码中看到的,零售商有一个省和一个地区。在添加新零售商时,表单上有下拉列表以选择省份和地区。但是,这些下拉列表是" dumb"而且我想让他们更多一点"智能"用一些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;
    }
}

省和地区实体也有类似的课程。我现在不会发布这些代码,不会让这篇文章过于沉重,但如果需要,我可以。

1 个答案:

答案 0 :(得分:0)

首先,这个问题似乎与HTML开发有关,然后再与RedBean本身有关。元素的Id不一定必须是Bean-ID。 其次我认为使用CSS类而不是id,这样你就可以利用多个元素的css样式,或者至少为其中一些元素组合通用格式。

如果没有任何进一步的代码,我想这里很难有机会帮助你

更新: 我还没有使用Zend Framework,但它使用小部件或类似的东西来创建元素。因此,您提供的模型定义了窗口小部件的常规属性。既然你说你正在创建Dropdown,也许在代码的某个地方存在这样的段落:

$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