如何使用ajax加载视图,以便也加载视图所需的其他js / css文件?


8

目前,我正在使用jQuery加载视图,如下所示:

$.ajax({
    type: 'POST',
    url: Drupal.settings.basePath + 'views/ajax',
    dataType: 'json',
    data: 'view_name=' + viewName + '&view_display_id=default&view_args=' + viewArgument, // Pass a key/value pair.
    success: function(data) {
      var viewHtml = data[1].data;
      target.children().fadeOut(300, function() {
        target.html(viewHtml);

        var newHeightOfTarget = target.children().height();

        target.children().hide();

        target.animate({
          height: newHeightOfTarget
        }, 150);

        target.children().delay(150).fadeIn(300);

        Drupal.attachBehaviors(target);
      });
    },
    error: function(data) {
      target.html('An error occured!');
    }
  });

我的问题是,例如,如果视图使用“字段幻灯片”模块,则无法加载使其正常工作所需的js / css文件。有什么更好的解决方案(=不受伤害的小猫)?


看来这将在D8 drupal.org/node/561858中解决。将路径传递到Drupal.settings.mymodule中的js / css文件并使用jQuery.getScript()和jQuery.getCSS()(来自github.com/furf/jquery-getCSS)获取它们可能是一种解决方法...
Temaruk

显然,Ajax框架已经在D7中延迟加载css / js / library文件。仍然需要更深入地研究,但是我认为解决方案可能是使用ajax页面交付
针对

我有一个类似的问题,尽管我在这里已经链接了一个问题,但仍未解决。
silkAdmin 2011年

我还不知道完整的答案,但是我认为Chaos Tools的AJAX API已经解决了这个问题。您可能要使用它或将其签出。可编辑字段还以某种方式处理此问题,因此可能需要检查更多参考代码。
wizonesolutions 2011年

1
@silkAdmin,我也发布了您问题的答案。还应该注意的是,在D7中,您实际上不需要使用ctools。Ajax的框架是在D7核心(api.drupal.org/api/drupal/includes--ajax.inc/group/ajax
ericduran

Answers:


7

嗯,我觉得这个问题值得大赏:-p,不过我还是想回答这个问题。

Drupal已经加载了任何额外的css / js,现在我真的找不到太多的文档,并且可悲的是,在没有真正阅读代码的情况下JS文件很难被记录下来,但是在那里。

您确实应该尽量避免让$ .ajax请求自己,而是使用Drupal.ajax打包所有内容,如果您使用Ajax系统,则甚至不需要编写自己的Ajax请求。

通过使用ajax命令实现适当的Drupal ajax请求,大多数css / js处理将自动为您完成。

通过查看上面的代码,看起来您在进行相同的请求视图通常可以自行完成。因此,您可能应该让视图处理ajax请求并覆盖将要触发的ajax命令作为您的命令。您可以通过实现hook_ajax_comamnd_alter来实现此目的,但是由于您丢失了所有上下文信息,因此它有点吸引视图,因此建议您改用hook_views_ajax_data_alter。

我知道答案中没有太多代码,但是很难用代码来回答,因为当前存在的代码不正确。

有关更多信息,请参见misc / ajax.js文件中的Drupal.ajax。有关使用Drupal.ajax实现ajax请求的示例,请参见views ajax文件。而且,如果您想查看视图示例并通过更改ajax命令来覆盖正常行为,请参见views_load_more模块,在其中执行此行为。

如果此处不清楚,也请随时对此答案发表评论。

有关Ajax框架的更多信息,请参见Ajax框架,例如,参见示例模块,甚至认为您想做的大部分事情都没有包含在示例模块中。


那一定是正确的方向,但我首先要核实。自问了这个问题之后,我就获得了Drupal 7的Ajax框架的经验,例如创建和使用自定义ajax命令。我将重温我的问题,看看可以做什么,并用我的发现信息进行更新!谢谢!
Temaruk

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.