Почему dojo работает при использовании CDN, но не при использовании $ this-> dojo-> setLocalPath (используя Zend Dojo)? - PullRequest
0 голосов
/ 28 июля 2010

Я использую Dojo, размещенный на CDN Google.Я только что загрузил версию для разработки, чтобы я мог выполнить некоторую отладку.При использовании 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 правильно настроен во всех моих макетах, представлениях и контроллерах, потому что dojo работает нормально, если я использую CDN.Я также проверил, что локальный путь разрешается правильно, что он и делает.

Вот как выглядит инициализация с использованием 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, который вызывает эти синтаксические ошибки?

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Похоже, что вам нужно "собрать" dojo, когда вы загружаете исходный код и хотите запустить его локально.Каким-то образом я пропустил это как требование использования версии 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 / profile, названную "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

Скопируйте получившуюся сборку из / release / myRelease в папку javascript вашего сайта, т.е. /js/myRelease/.

Важными параметрами командной строки являются «профиль» и «действие», остальные являются необязательными.Вы можете получить полное описание того, что означает каждый параметр командной строки, по указанному выше 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 голосов
/ 06 августа 2010

У меня была точно такая же проблема.Кажется, что-то связано с локализацией, но я не могу понять причину.

Однако существует обходной путь, который в некоторых случаях сделает эту работу: в каталоге dijit / nls создайте каталоги en и en-us и скопируйте в них common.js и loader.jsfiles.

Возможно, вам придется сделать это для более чем одного dijit, в зависимости от того, где dijit ищет файлы локализации.

Если вы найдете лучшее решение, MikeH, пожалуйста, опубликуйте его здесь.Ранее сегодня я разместил эту проблему на форуме додзё, и буду ссылаться на эту тему.Надеюсь, у кого-нибудь будет исправление без перерыва.

кен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...