web-dev-qa-db-ja.com

jsを使用してブロック内のビューを更新

2つの異なるブロックがあります。 1つはフォームを持ち、もう1つは上記のフォームからアップロードされたいくつかのファイルを含むビューです。

フォームの送信時に、ビューの結果を更新する必要があります。 jsを使用してそれを行うことができると思ったが、それを動作させることはできません。

コードを確認してください。どんなアドバイスも参考になります!

Drupal.behaviors.myViewsRefresh = {
    attach: function( context , settings) {
        var viewName = 'application_documents';

        // Your views should be Ajax enabled
        var instances = Drupal.views.instances;
        var myViews;

        // then simply need to iterate through the various
        // views instances name to find the view
        $.each( instances , function getInstance( index, element){
            if(element.settings.view_name == viewName ){
                myViews = '.view-dom-id-' + element.settings.view_dom_id;
            }
        });

        $(document).once('mysubmitbutton').ajaxComplete(function(event, xhr, settings){
            if(typeof myViews !== 'undefined'){
                $(myViews).trigger('RefreshView');
            }
        });

    }
}

AjaxCompleteに入ることができますが、ビューは再読み込みされません。ビューIDは正しいです。

前もって感謝します。

1
Ismini

myViews変数を作成する方法が、これが機能しない理由のようです。

私のために働いたことはこれを変えていました:

            myViews = '.view-dom-id-' + element.settings.view_dom_id;

            myViews = '.js-view-dom-id-' + element.settings.view_dom_id;

フォームを送信せずに、単純なバージョンを試してみました。ブラウザのコンソールからこれを呼び出すだけです。

jQuery('.js-view-dom-id-c58e9660da223aaf7c1645b2746e0b2e16f6a2f3e1de74c8533e6ad6117613db').trigger('RefreshView')

そしてそれは期待通りに機能しました。最後のコメントとして、および提供したコードでコメントされているように、ビューはAjax対応でなければなりません。そうでない場合、これは機能しません。

幸運を!

PS:コードベースからの最も関連性の高い情報(このコメントはそれをすべて述べています):

// Add a trigger to update this view specifically. In order to trigger a
// refresh use the following code.
//
// @code
// $('.view-name').trigger('RefreshView');
// @endcode

http://cgit.drupalcode.org/drupal/tree/core/modules/views/js/ajax_view.es6.js#n94

5