3

ファイル ../vendor/sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Resources/views/CRUD/edit_orm_one_association_script.html.twig にあることに気付きました。クリックすると新しい行が作成されますリンクで、具体的には次のコードに追加します。

// the ajax post
    jQuery(form).ajaxSubmit({
        url: '{{ url('sonata_admin_append_form_element', {
            'code':      sonata_admin.admin.root.code,
            'elementId': id,
            'objectId':  sonata_admin.admin.root.id(sonata_admin.admin.root.subject),
            'uniqid':    sonata_admin.admin.root.uniqid
        } + sonata_admin.field_description.getOption('link_parameters', {})) }}',
        type: "POST",
        dataType: 'html',
        data: { _xml_http_request: true },
        success: function(html) {

            jQuery('#field_container_{{ id }}').replaceWith(html); // replace the html
            if(jQuery('input[type="file"]', form).length > 0) {
                jQuery(form).attr('enctype', 'multipart/form-data');
                jQuery(form).attr('encoding', 'multipart/form-data');
            }
            jQuery('#sonata-ba-field-container-{{ id }}').trigger('sonata.add_element');
            jQuery('#field_container_{{ id }}').trigger('sonata.add_element');

        }
    });

    return false;
}; 

トリガーを実装する方法を知りたい:

jQuery('#field_container_{{ id }}').trigger('sonata.add_element'); 

JavaScriptを追加するには!Sonata Type Collection に新しい行を作成した後。

ドキュメントには次のように書かれています: ヒント: 行が追加された (sonata-collection-item-added) または削除された (sonata-collection-item-deleted) 後に、jQuery イベントが発生します。それらにバインドして、テンプレートにインポートされたカスタム JavaScript をトリガーすることができます (例: 追加したばかりの日付フィールドにカレンダー ウィジェットを追加します)。

どんな助けでも大歓迎です!

4

4 に答える 4

4

わかりました、@Tautrimas Pajaskasさん、ご回答ありがとうございます。解決策は次のとおりです。

 <script type="text/javascript">
    $('div[id$=_empDomicilios]').on('sonata.add_element', function(event) {

        alert('trigger is fired ');
        // insert here your code
    });
 </script> 

Jquery の API によると: jQuery 1.7 の時点で、.live() メソッドは非推奨です。.on() を使用して、イベント ハンドラーをアタッチします。

次のように、実際にトリガーから他のパラメーターを送信できる場合:

jQuery('#field_container_{{ id }}').trigger('sonata.add_element', ['{{ id }}','{{ sonata_admin.admin.root.id(sonata_admin.admin.root.subject) }}', '{{ sonata_admin.admin.root.uniqid }}']); 

次に、JavaScript コードは次のようになります。

<script type="text/javascript">
    $('div[id$=_empDomicilios]').on('sonata.add_element', function(event, elementId, objectId, uniqid) {

            alert('trigger is fired '):
            alert('ElementId: '+ elementId);
            alert('ObjectId: '+ objectId);
            alert('Uniqid: '+ uniqid);
            // insert here your code
    });
 </script> 

注: この例では、id 属性値が「_empDomicilios」で終わる div を使用しました。

于 2013-08-26T19:11:30.853 に答える
1

$(document).ready()コードを取り出して適応させるまで、@Emerson Mineroの答えはうまくいきませんでした

$(document).on('sonata.add_element', function() {
    console.log('toto');
});`
于 2016-07-04T08:17:37.793 に答える
1

ただやる

jQuery('[id^="field_container_"][id$="<insert element name here>"]').live('sonata.add_element', function(event) { alert('foo bar'); })

最初に、jQuery セレクターが期待どおりに機能するかどうかをテストすることを忘れないでください。Javascript 内のフォーム要素からその uniqId を抽出できれば、複雑なセレクターid^=を使用する必要はありません。id$=

于 2013-08-25T19:27:13.583 に答える