Сборка Dojo 1.7 для приложения Mobile PhoneGap - PullRequest
1 голос
/ 30 ноября 2011

Я пытаюсь собрать додзё 1.7 для использования в моем приложении phonegap.В настоящее время я использую додзё 1.6.1.Я создал свой текущий файл dojo.js, зайдя в build.dojotoolkit.org и выбрав все в dojox.mobile, а также в модуле dojo.store.JsonRest.Это прекрасно работает.

Моя проблема - попытка создать файл профиля, чтобы создать сборку, аналогичную той, которую я получил с сайта сборки dojo.

Я скачал стабильную версию dojo 1.7.Я вошел в папку buildScripts из командной строки и попытался запустить сборку с помощью следующей команды:

>build profile=path/myMobileProfile.js action=release releaseName=test

Я использовал образец профиля из папки с профилями:

dependencies = {
    stripConsole: "normal",

    layers: [
        {
            name: "dojo.js",
            customBase: true,
            dependencies: [
                "dojox.mobile.parser",
                "dojox.mobile",
                "dojox.mobile.compat"
            ]
        },
        {
            name: "../dojox/mobile/_compat.js",
            layerDependencies: [
                "dojo.js"
            ],
            dependencies: [
                "dojox.mobile._compat"
            ]
        }
    ],

    prefixes: [
        [ "dijit", "../dijit" ],
        [ "dojox", "../dojox" ]
    ]
}

Этопостроен без ошибок.Затем сгенерированный из сборки файл dojo.js был перенесен в мое приложение phonegapЯ изменил свой индексный файл на следующий только для тестирования:

<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<meta http-equiv="cache-control" content="no-cache"/>
<meta http-equiv="pragma" content="no-cache"/>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojox/mobile/themes/android/android.css" type="text/css" media="screen" title="no title">
<script type="text/javascript" src="libs/dojo/dojo/dojo.js" djConfig="parseOnLoad:true"></script>
<script type="text/javascript" charset="utf-8" src="phonegap-1.1.0.js"></script>
</head>
<body style="background-color:white">
Phonegap
</body>
</html>

Каждый раз, когда я запускаю приложение, я получаю белую страницу.Когда я заменяю файл dojo.js своей рабочей копией, я вижу вывод Phonegap.

Я хотел бы иметь возможность использовать мобильное Dojo 1.7 и некоторые новые функции, такие как SpinWheel.

Может кто-нибудь помочь мне с моей сборкой?

Спасибо

Ответы [ 5 ]

2 голосов
/ 05 декабря 2011

У меня такие же проблемы. Я думаю, что это связано с новым загрузчиком AMD.

Кажется, что синтаксический анализатор не анализирует декларативные виджеты, а ожидает его выполнения по требованию или просто никогда не вызывается.

Я нашел несколько документов, в которых упоминается, что мы должны использовать dojo / ready, но не смог заставить его работать с ним и phoneGap. Тот же код отлично работает на рабочем столе без PhoneGap, что странно.

Смотрите живые документы: http://livedocs.dojotoolkit.org/dojo/ready

А также: http://livedocs.dojotoolkit.org/loader/amd

"Чтобы перевести загрузчик в режим AMD, установите для переменной конфигурации async значение truey:

<script data-dojo-config="async:1" src="path/to/dojo/dojo.js"></script>
<script>
  // ATTENTION: nothing but the AMD API is available here
</script>

Обратите внимание, что вы можете установить только асинхронный флаг перед загрузкой dojo.js, и что в режиме AMD ни Dojo, ни любая другая библиотека не загружаются автоматически - все зависит от приложения, которое решает, какие модули библиотеки для загрузки."

1 голос
/ 20 апреля 2012

Эта проблема решена с помощью Dojo 1.7.2

1 голос
/ 06 марта 2012

Для меня этот профиль отлично работает с Dojo 1.7 и PhoneGap:

    dependencies = {
    selectorEngine: "acme",
    layers: [
             {
// This is a specially named layer, literally 'dojo.js'
// adding dependencies to this layer will include the modules    
// in addition to the standard dojo.js base APIs.    
             name: "dojo.js",    
             dependencies: [    
                 "dijit._Widget",    
                 "dijit._Templated",    
                 "dojo.fx",    
                 "dojo.NodeList-fx",    
//this wasn't included in the standard build but necessary 
                 "dojo._firebug.firebug",    
 //my used dojo requirements
                 "dojox.mobile.parser",    
                 "dojox.mobile",     
                 "dojox.mobile.Button",    
                 "dojox.mobile.SwapView",    
                 "dojox.mobile.ScrollableView",    
                 "dojox.mobile.TabBar",     
                 "dojox.mobile.SpinWheelTimePicker",     
                 "dojox.mobile.compat"    
            ]     
       }    
], 

prefixes: [   
       ["dijit", "../dijit" ],    
       ["dojox", "../dojox" ]    
]    
}

Но с этим профилем файлы CSS не включены, поэтому вам нужно скопировать всю структуру папок CSS. Мой HTML-файл выглядит так:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0//EN" "http://www.w3.org/TR/html5/strict.dtd">
            <html>
                <head>
                    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"></meta>
                    <meta name="apple-mobile-web-app-capable" content="yes"></meta>
                    <title>dojox.mobile Demo</title>
                    <link href="css/themes/iphone/iphone.css" rel="stylesheet" type="text/css" />
                    <script type="text/javascript" src="phonegap.js" charset="utf-8"></script>
                    <script type="text/javascript" src="dojo.js" djConfig="isDebug:true, parseOnLoad:true"></script>
                    <script type="text/javascript">
                        require([
                                        "dojox/mobile/parser",      // (Optional) This mobile app uses declarative programming with fast mobile parser
                                        "dojox/mobile",             // (Required) This is a mobile app.
                                        "dojox/mobile/Button",
                            //Some other dojo Widgets
                                "dojox/mobile/compat"       // (Optional) This mobile app supports running on desktop browsers
                                 ],
                                function(parser, mobile, compat){
                                //Optional module aliases that can then be referenced inside callback block
                                }
                                // Do something with mobile api's.  At this point Dojo Mobile api's are ready for use.
                                );
        //to make sure dojo and PhoneGap was loaded use this
        document.addEventListener("deviceready", init(), false);
        function init(){
           dojo.ready(function(){
              //do something
           });
        }
        </script>
    </head>
    <body>
    </body>

НТН

0 голосов
/ 07 декабря 2011

Я обнаружил следующее, что может пролить немного света на эту проблему: «Dojo и PhoneGap? Оба имеют свое собственное событие, чтобы подтвердить, когда страница готова. Мы обнаруживаем, что dojo.ready слишком рано для таких вещей, какdeviceDetection AP - это при работе в контейнере PhoneGap ?, и было бы лучше, если бы он выполнялся внутри метода PG deviceReady. ... "

Полный поток можно найти здесь: http://bugs.dojotoolkit.org/ticket/14062

Обсуждается додзё 1.6.1, но похоже, что некоторые изменения в додзё 1.7 могут вызвать более серьезные реакции.Предлагается обходной путь, но я не уверен, что он решит проблему 1.7.

0 голосов
/ 05 декабря 2011

Также нашел это: http://livedocs.dojotoolkit.org/dojo/parser и попытался принудительно проанализировать весь dom или только конкретный элемент, но все равно ничего.

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