web-dev-qa-db-ja.com

Drupal.behaviors Once()は実行されません

ユーザーの駐車情報を表示するカスタムブロックを作成し(jsonを使用)、これはほとんどのページで正常に機能しましたが、作成したノード(/ node/1、/ node/2などのページ)にアクセスすると、jqueryが実行されます2回(したがって、情報はブロックのparkings-divに2回追加されます)。いくつか検索した後、「1回」を使用することで問題が解決すると考えましたが、これを追加した後、まったく実行されません。

(function ($) {
    "use strict";

Drupal.behaviors.Parkings = {
    attach: function (context, settings) {
        $('#parkings',context).once('parkingsbehavior', function () {
            getAndShowResults();
        });

        function getAndShowResults() {
            var root_url = getRootUrl();
            $.get(root_url + "parkings", {})
                    .done(function (data) {
                        var i;
                        for (i = 0; i < data.length; i++) {
                            var p = $(document.createElement("p"));
                            var p_text = data[i].description + ', free: ' + data[i].parkingStatus.availableCapacity;
                            p.append(p_text);
                            p.appendTo("#parkings");
                        }
                    });
        }

        function getRootUrl() {
            return window.location.Origin ? window.location.Origin + '/' : window.location.protocol + '/' + window.location.Host + '/';
        }
}};

}(jQuery));

これは私のルーティングファイルです:

parkings.content:
      path: '/parkings'
      defaults:
        _controller: '\Drupal\parkings\Controller\ParkingsController::content'
        _title: 'Parkings Gent'
      requirements:
       _permission: 'access content'

そして私はこれらの依存関係を追加しました:

    - core/jquery
    - core/drupal.ajax
    - core/drupal
    - core/drupalSettings
    - core/jquery.once

Once()の動作を誤解しているか、それとも間違って使用していますか?

(Drupal 8 v1.8を使用しています)

2
Robin De Haes

jQuery jQuery 2.xで変更されたら、Drupal changelog を参照してください。

私は同じ問題に遭遇し、それが私のためにそれを修正しました:

本質的に今あなたがしたいことになるでしょう:

...once('mybehavior').each(function()...

10
Danny Englander