2010-07-28 74 views
0

我一直在使用託管在Google 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) 

我知道我有道場正確設置我的整個佈局,視圖和控制器,因爲如果我使用一個CDN道場正常工作。我也已經驗證了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> 

我在做什麼錯與使這些語法錯誤發生的本地路徑?

回答

2

看來,你有,當你下載源代碼並想在本地運行它以「建」道場。不知何故,我錯過了這是使用dojo的本地路徑版本的要求。無論如何,我終於可以通過自定義構建讓dojo在本地正確運行。我發現這個道場引用非常有幫助:

http://docs.dojocampus.org/quickstart/custom-builds

在道場分佈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" ] 
    ] 

}; 

我把這個在/ UTIL/buildscripts/Profiles文件夾,命名爲 「myProfile.profile.js」。

然後,我跑了構建腳本/ 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 

複製生成的建立從/發行/ myRelease到您的網站的JavaScript文件夾,即/ JS/myRelease /。

重要的命令行選項是「profile」和「action」,其他選項是可選的。您可以在上面提供的url處獲得每個命令行選項意義的完整描述。我根據自己的特殊需求定製了這些選項 - 您的選擇可能會非常不同,我只是將它們作爲最終示例。如果你在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」自定義版本是什麼終於得到了這個工作對我來說。我希望這能幫助別人節省一點時間!

0

我有完全相同的問題。這似乎與本地化有關,但我無法弄清楚原因。

儘管如此,在某些情況下可以完成這項工作:在dijit/nls目錄中,創建en和en-us目錄並將common.js和loader.js文件複製到其中。

您可能必須爲多個dijit執行此操作,具體取決於dijit查找本地化文件的位置。

如果您遇到更好的解決方案,請將其發送到此處。今天早些時候,我將這個問題發佈到dojo論壇,並通過鏈接到此主題進行跟進。希望有人會有一個不間斷的修復。

+0

我沒有看到語言環境問題的任何運氣,但我今天終於生成了一個工作解決方案,這不是一種解決方法。我把它作爲下面的答案發布。我希望它能幫助你把事情做到最後!我很欣賞你給的意見,因爲它讓我再次看到這一點;-) – MikeH 2010-08-08 18:30:04

+0

謝謝MikeH。 我想我會做的只是使用一個內置版本,然後在我們發佈之前進行自定義生成,如下所述。自定義構建絕對是最終發佈的途徑,因爲它們真正將尺寸縮小並針對您的應用需求進行優化。 只是爲了完成這個線程,這裏是Dojo論壇的一個鏈接,指出丟失文件的問題,並指出它是由於Dojo的非內置/源版本: http:// dojo-toolkit。 33424.n3.nabble.com/1-4-error-missing-files-tp327313p327313.html – KenP 2010-08-11 19:50:15

相關問題