2

コレクションによって作成されたフィールドセットに ID を設定することはできますか? いくつかのエンティティ (ユーザー、アドレス、添付ファイルなど) があり、ユーザー エンティティには、コレクションで作成されたフィールドセットがいくつかあります。したがって、ユーザーは複数のアドレスまたは添付ファイルを持つことができます。私のコレクションは次のように構築されています。

$addressFieldset = new AddressFieldset($serviceManager);

$this->add(array(
   'type' => 'Zend\Form\Element\Collection',
   'name' => 'addresses',
   'options' => array(
       'label' => 'Choose address for user',
       'count' => 1,
       'should_create_template' => true,
       //'template_placeholder' => '__placeholder__',
       'allow_add' => true,
       'target_element' => $addressFieldset
       ),
   ));

$this->add(array(
     'name' => 'addAddress',
     'type' => 'button',
     'options' => array('label' => 'Add Address',
            ),
      ));
$this->get('addAddress')->setAttribute('onclick', 'return add_address()');

私の問題は、userfieldset に複数のコレクションがあることです。したがって、いくつかのアドレスを動的に追加する場合 (使用する例: http://zf2.readthedocs.org/en/latest/modules/zend.form.collections.html )、例には次の JavaScript があります。

function add_address() {
    var currentCount = $('form > fieldset > fieldset').length;
    var template = $('form > fieldset > span').data('template');

    template = template.replace(/__index__/g, currentCount);

    $('form > fieldset').append(template);

    return false;
}

しかし、私の問題は、この例を使用すると、添付ファイルの下にもアドレスフィールドセットが追加されることです。私が欲しいのは次のようなものです:

function add_address() {
    var currentCount = $('form > #addressFieldset > fieldset').length;
    var template = $('form > #addressFieldset > span').data('template');

    template = template.replace(/__index__/g, currentCount);

    $('form > #addressFieldset').append(template);

    return false;
}

これで、addressFieldset にしかアクセスできませんが、AddressFieldset に ID を設定するにはどうすればよいですか? 私のツリーは次のようになります。

<form>
    <fieldset id="addressFieldset">
        <legend>Choose addresses</legend>
        <fieldset>
            //Data
        </fieldset>
    </fieldset>
    <fieldset id="attachmentFieldset">
        <legend>Choose attachments</legend>
        <fieldset>
            //Data
        </fieldset>
    </fieldset>
</form>

フィールドセットに ID を設定する方法がわかりません。助けてください

4

3 に答える 3

1

attributes要素の下に追加するだけです:

$this->add(array(
    'attributes' => array(
        'id' => 'someId',
        'onclick' => 'return add_address()';
    ),
    // your other stuff, type, name, options, etc...
));
于 2013-05-07T16:15:48.427 に答える
0

なぜ ZF1 の Form Decorators が ZF2 にドロップされたのかわかりません...

IMOフォーム要素を装飾する最も効果的な方法は、ZF2のフォームビューヘルパーを「覆す」ことです...私はかなり野蛮にやったにもかかわらず...

    <?php
    namespace Application\Helpers\View;

    use Zend\Form\ElementInterface;
    use Zend\Form\View\Helper\FormCollection as BaseFormCollection;

    class FormCollection extends BaseFormCollection
    {
        public function render(ElementInterface $element)
        {
            if($element->getAttribute('name') == 'usertype')
                return str_replace('<fieldset>', '<fieldset class="noborder">', parent::render($element));
            else
                return parent::render($element);
        }
    }
于 2014-03-21T12:34:49.463 に答える