我一直在谷歌的CDN上使用Dojo。我刚刚下载了开发版本,所以我可以做一些调试。使用本地存储的dojo时,Firebug会报告几个语法错误。他们都看起来像这样:
SyntaxError: syntax error
(no script)(""en-us"")bootstrap.js (line 601)
(no script)(""dojo.cldr"", ""number"")bootstrap.js (line 590)
(no script)(""dojo.cldr"", ""number"")loader.js (line 634)
(no script)(""./number.js"", ""dojo.number"")loader.js (line 76)
(no script)(""dojo.number"")loader.js (line 411)
(no script)(""./currency.js"", ""dojo.currency"")loader.js (line 76)
(no script)(""dojo.currency"")loader.js (line 411)
(no script)(""../dijit/form/CurrencyTextBox.js"", ""dijit.form.CurrencyTextBox"")loader.js (line 76)
(no script)(""dijit.form.CurrencyTextBox"")loader.js (line 411)
[Break on this error] (601 out of range 505)
bootstrap.js (line 601)
我知道我在整个布局,视图和控制器中都正确设置了Dojo,因为如果我使用CDN,dojo工作正常。我还验证了localpath能够正确解析它。
这是使用CDN初始化的样子(这可以正常工作):
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
<?php echo $this->headLink(); ?>
<?php echo $this->headScript();
if ($this->dojo()->isEnabled()) {
$this->dojo()->setCdnVersion('1.5')
->addStyleSheetModule('dijit.themes.claro');
echo $this->dojo();
}
?>
</head>
这就是使用本地版本的样子:
<head>
<?php echo $this->headMeta(); ?>
<?php echo $this->headTitle(); ?>
<?php echo $this->headLink(); ?>
<?php echo $this->headScript();
if ($this->dojo()->isEnabled()) {
$this->dojo()->setLocalPath('/js/dojo/dojo.js')
->addStyleSheetModule('dijit.themes.claro')
->setDjConfigOption('parseOnLoad', true)
->setDjConfigOption('isDebug', true);
echo $this->dojo();
}
?>
</head>
出现这些语法错误的localpath我做错了什么?
答案 0 :(得分:2)
当您下载源并希望在本地运行它时,您必须“构建”dojo。不知怎的,我错过了这个作为使用dojo的本地路径版本的要求。无论如何,我终于能够通过自定义构建让dojo在本地正确运行。我发现这个dojo参考非常有帮助:
http://docs.dojocampus.org/quickstart/custom-builds
在dojo发行版的util / buildscripts文件夹中,还有几个预定义的构建配置文件。我怀疑你可以使用其中一个构建整个dojo发行版,但我想如果我要解决这个问题,不妨从中获得优化的构建。
我的构建配置文件最终看起来像这样:
dependencies ={
layers: [
{
name: "mydojo.js",
dependencies: [
"dojox.grid.DataGrid",
"dojox.Data.QueryReadStore",
"dijit.form.ComboBox",
"dijit.form.ValidationTextBox",
"dijit.form.CurrencyTextBox",
"dijit.form.PasswordTextBox",
"dijit.form.RadioButton",
"dijit.form.Button",
"dijit.form.CheckBox",
"dijit.form.DateTextBox"
]
}
],
prefixes: [
[ "dijit", "../dijit" ],
[ "dojox", "../dojox" ]
]
};
我把它放在名为“myProfile.profile.js”的/ util / buildscripts / profiles文件夹中。
然后,我从/ util / buildscripts:
运行了构建脚本./build.sh profile=myProfile action=release optimize=shrinksafe.keepLines layerOptimize=shrinksafe.keepLines releaseName=myRelease localeList=en-us,es-es version=0.1.dev
将生成的构建从/ release / myRelease复制到您网站的javascript文件夹,即/ js / myRelease /.
重要的命令行选项是“profile”和“action”,其他选项是可选的。您可以在我上面提供的网址上获得每个命令行选项含义的完整描述。我根据自己的特殊需求定制了这些选项 - 你的选择可能非常不同,我提供它们只是作为我最终看起来的样子。如果您使用的是Windows,而不是“build.sh”,请使用“build.bat”。
然后,要设置Zend使用此版本,我在layout.phtml文件中执行了以下操作:
if ($this->dojo()->isEnabled()) {
$this->dojo()->setLocalPath($this->baseUrl() . '/js/myRelease/dojo/dojo.js')
->addStyleSheetModule('dijit.themes.claro')
->setDjConfigOption('isDebug', true)
->setDjConfigOption('debugAtAllCosts', true)
->addLayer($this->baseUrl() . '/js/myRelease/dojo/mydojo.js')
;
}
使用“addLayer”进行自定义构建是我最终得到的。我希望这有助于拯救别人一点时间!
答案 1 :(得分:0)
我遇到了完全相同的问题。它似乎与本地化有关,但我无法弄清楚原因。
但是,有一种解决办法,它可以在某些情况下完成工作:在dijit / nls目录中,创建en和en-us目录并将common.js和loader.js文件复制到它们中。 / p>
您可能必须为多个dijit执行此操作,具体取决于dijit查找本地化文件的位置。
如果您遇到更好的解决方案,MikeH,请在此处发布。今天早些时候我将此问题发布到dojo论坛,并将通过链接到此主题进行跟进。希望有人会有一个非权宜之计。
肯