ユーザーの駐車情報を表示するカスタムブロックを作成し(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を使用しています)
jQuery jQuery 2.xで変更されたら、Drupal changelog を参照してください。
私は同じ問題に遭遇し、それが私のためにそれを修正しました:
本質的に今あなたがしたいことになるでしょう:
...once('mybehavior').each(function()...