Ajax 加载的内容在 Drupal 中引用了错误的节点 ID
Posted
技术标签:
【中文标题】Ajax 加载的内容在 Drupal 中引用了错误的节点 ID【英文标题】:Ajax loaded content referencing wrong node id in Drupal 【发布时间】:2012-05-28 13:07:04 【问题描述】:我有一个节点列表,每个节点都可以单击。单击发送一个节点引用参数,该参数使用 ajax 加载一个新视图。 Jquery 通过 content-type-tpl.php 上的隐藏输入值收集节点参考号。同样,新视图中的每个节点都有一个单击,该单击发送一个节点引用参数,该参数使用 ajax 加载一个新视图。然而,虽然原始视图中的点击工作正常,但新调用视图中的点击并没有引用正确的节点。不是引用被点击节点的节点id,而是收集视图中下一个节点的节点id。奇怪的是,在 content-type-tpl.php 上放置 <?php echo $node->nid;?>
时,页面上会回显正确的节点 ID。但遗憾的是,这不是发送到视图参数的那个。因此,单击新加载的 ajaxed 视图中的任何节点,都会发送下一个节点的 id。这是javacript:
Drupal.behaviors.ajaxlinks = function (context)
$('.morelink:not(.togg-processed)', context).addClass('togg-processed').each(function ()
var myindex = $('.morelink').index($(this));
var target = $('.newthing').eq(myindex)
var nid = $(".mynid").eq(myindex).val();
$(this).click(function()
if (($('.hiddenrows').eq(myindex).is(":hidden")))
$('.hiddenrows').eq(myindex).show();
$('.newthing').eq(myindex).show();
var toLoad = Drupal.settings.basePath + 'replies/' + nid;
xhr = $.ajax(
url: toLoad,
success: function(data)
$(target).html($(data));
Drupal.attachBehaviors(context);
);
else
$('.hiddenrows').eq(myindex).hide();
$('.newthing').eq(myindex).hide();
return false;
这是相同的代码,所以我看不出为什么它在新加载的视图中工作方式不同。谁能发现我做错了什么?我怀疑这与放置变量或声明变量的方式有关。或者可能与滥用 index 、 eq 或 this 有关?
【问题讨论】:
【参考方案1】:看起来 Drupal.attachBehaviors 应该在 (target) 而不是 (context) 上触发。它在整个上下文中重新启动脚本,而不仅仅是新的 ajaxed 内容。所以我改变了 Drupal.attachBehaviors(context);到 Drupal.attachBehaviors(target);
现在可以了!
【讨论】:
以上是关于Ajax 加载的内容在 Drupal 中引用了错误的节点 ID的主要内容,如果未能解决你的问题,请参考以下文章