【问题标题】:dojo.xd.js on Dojo 1.7Dojo 1.7 上的 dojo.xd.js
【发布时间】:2012-07-16 12:13:07
【问题描述】:

我的野心已经超出了我在 Zend Framework 项目中实现 Dojo 的能力,该项目使用 PHP 和 Mysql 的 XAMPP 发行版作为我在 Windows 7 机器上的开发/测试环境。老实说,我不知道这是 ID10T 问题(我)还是系统故障。如果这是我的失误,我提前道歉。

我正在尝试使用 V1.7 版本的 Dojo 来实现,同时保持在生产就绪环境中(因此避免跳转到 ZF 2 等)。我从文档中了解到 Dojo V1.7 中的 dojo.xd.js 已被 dojo.js 取代。我的问题在于尝试为 Dojo 使用 CDN 源。

我的页面的 dojo 内容渲染良好,但 Firebug 显示错误“NetworkError: 404 Not Found - http://ajax.googleapis.com/ajax/libs/dojo/1.7/dojo/dojo.xd.js”并且页面在页眉中嵌入了以下内容:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.7/dojo/dojo.xd.js"></script>

在我的页面上追踪问题的根源表明它是'echo $this->dojo;'介绍问题的陈述。 将引导文件中的 'setCdnVersion(1.7)' 更改为 'setCdnVersion(1.6)' 可以解决问题,但我真的很想使用 V1.7+。

实际上,将嵌入的 URI 粘贴到地址栏中会返回 404 页面未找到。 Dogpile 没有提到这个特定的错误,我可以看到。 我在 dojotoolkit.org 上找不到任何出现的错误报告(据我所知)

看起来我的 Dojo 配置没有认识到需要将 dojo.js 用于 V1.7(尽管我不确定问题实际出在哪里)。所以,我必须承认我不知道如何解决这个问题,除了让自己受制于集体 SO 专业知识的摆布。

bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
...
protected function _initView ()
{
    // Initialize view
    $view = new Zend_View();
    $view->setEncoding('UTF-8');
    $view->headMeta()->appendName('Content-Type', 'text/html; charset=UTF-8');

    // add dojo helper path to view
    $view->addHelperPath('Zend/Dojo/View/Helper','Zend_Dojo_View_Helper');

    // configure Dojo view helper, disabled...
    $view->dojo()
                 ->disable()
                 ->setCdnVersion(1.7)
                 ->setCdnBase(Zend_Dojo::CDN_BASE_GOOGLE)
                 ->addStyleSheetModule('dijit.themes.tundra')
                 ->setDjConfigOption('parseOnLoad', TRUE)
                 ->setCdnDojoPath(Zend_Dojo::CDN_DOJO_PATH_GOOGLE)  
                 ->useCdn();

    // Add it to the ViewRenderer
    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    $viewRenderer->setView($view);

    // Return it, so that it can be stored by the bootstrap
    return $view;
}

}

在 index.phtml 中:

<head>
<?php echo $this->headLink()->prependStylesheet($this->baseUrl() . '/assets/css/site.css'); ?>

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.7/dijit/themes/tundra/tundra.css">
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.7/dojox/grid/resources/Grid.css">
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/dojo/1.7/dojox/grid/resources/tundraGrid.css">
<?php 
    // Dojo plug-in enablers ...
    echo $this->dojo(); 
    $this->dojo()->enable();
?>

版本信息: Xampp dist - V1.7.7 (Apache/2.2.21, PHP/5.3.8) Zend Framework dist - V1.11.11

【问题讨论】:

    标签: zend-framework dojo xampp


    【解决方案1】:

    来自1.7 release notes

    请注意,如果您是从 1.6 或更早版本升级,我们不再区分 dojo.js 和 dojo.xd.js(所有版本都使用新加载器跨域工作),因此请更新您的 URL 以引用到dojo.js。

    所以 Dojo 助手使用文件名 dojo.xd.js(跨域版本),但在 1.7 中它应该只是 dojo.js。 Dojo 1.7 是在 Dojo 集成到 ZF 之后发布的,所以这可能是 ZF 本身的一个错误。

    【讨论】:

    • 这是我问题的核心; 'dojo.xd.js' 的出现是由 Framework/dojo 设置中的 自动生成的。我没有明确引用它,它是由 'echo $this->dojo();' 插入的在我的页眉中声明。我的问题是了解它的插入位置/方式。正如您所说,这暗示了 ZF 错误,但我希望其他比我理智更明智的头脑检查问题,以防我成为自己缺乏知识的受害者。
    • 它似乎在 Zend/Dojo.php 中被硬编码: js';所以我假设你可以通过改变它来“修复”它......
    • 或者更干净,使用辅助方法:setCdnDojoPath 设置正确的路径和名称...
    • @Chris,这正是我所需要的;将引导配置行切换到 '->setCdnDojoPath('/dojo/dojo.js')' 现在会在我的页面头中插入所需的 dojo.js:
    猜你喜欢
    • 2012-02-29
    • 2012-04-14
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多