【问题标题】:Use Drupal7 AJAX goodness programmatically以编程方式使用 Drupal7 AJAX 优点
【发布时间】:2010-10-28 11:44:39
【问题描述】:

来自http://drupal.org/node/953016的X帖子

Drupal 7 AJAX 系统非常棒,它可以非常流畅地处理表单甚至链接。

我无法以理智的方式解决问题是从 javascript 中调用它。我可能想要一个没有表单的动态页面,并作为其中的一部分进行 Drupal ajax 调用,特别是让 ajax 命令在返回时运行。

到目前为止,我发现的最有效的方法是:

  dummy_link = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
  $(vars_div).append(dummy_link);
  Drupal.attachBehaviors(vars_div);
  dummy_link.click();

这很有效,但却是一个巨大的黑客攻击。我还没有找到一种方法来执行 ajax 调用并让 Drupal ajax 框架来做,而不是标准的 jquery 框架。

我原以为可以直接调用drupal ajax api,有人知道怎么做吗?

【问题讨论】:

    标签: ajax drupal drupal-7


    【解决方案1】:

    简短的回答是,您会希望自己做到以下几点:

    $.ajax(ajax.options);
    

    这是 jQuery 部分,但有一组选项可帮助您在成功处理、效果等方面融入 Drupal Goodness。这实际上是在您的“巨大黑客”示例中为您带来的好处。

    以编程方式创建新的 Drupal.ajax 函数仍然需要合成元素:

    base = 'someid'
    element = $('<a href="'+uri+'" class="use-ajax">Loading Vars</a>');
    element_settings = {'url': uri, 'event': 'click'}
    myAjax = new Drupal.ajax(base, element, element_settings)
    

    但你至少可以在不模拟 UI 中的点击的情况下触发它:

    myAjax.eventResponse(element, 'click')
    

    感觉应该有更好的方法来做到这一点,但它需要另一种方法来设置不需要 DOM 元素的初始 ajax 原型。因为很多交互集都取决于如何将数据移回 DOM,所以我认为这个用例还没有得到很好的支持。

    也可以通过一组适当的选项直接进入 jQuery 并获得您想要的效果,但是 Drupal.ajax 原型函数自我引用相当多,所以在没有 Drupal.ajax 类的情况下这样做似乎有点冒险.

    【讨论】:

    • 我在使用 CTools 的 Druapl 6 中遇到了相同的基本挑战,并且为两者提供一个好的模式会很棒。
    • 感谢 Josh,我曾考虑在没有 drupal.ajax 类的情况下执行此操作,但得出的结论与您所做的相同。我对你的回答很满意,我担心我错过了一些明显的东西,但现在不认为我是。
    • 不过,我会注意这一点。我认为可以出现更好的技术,我们可以为其他人提供一般的“最佳实践”。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多