0

私は助けが必要です、私はここで頭が痛いです。durandaljs を使用してアプリを開発し、ブラウザーでテストを行っていますが、これまでのところ夢のように動作します! 次に、アプリを Android デバイスにデプロイしようとすると、すべてが崩壊します。

ここここの指示に従って、Node.js を使用して Weyland でビルドを最適化しました。app フォルダー内に main-built.js ファイルを取得し、app フォルダーと lib フォルダー内のほとんどすべてを含む build フォルダーを取得します (eek!!!)。最初の質問は、phonegap android www フォルダーに何をコピーするかです。ビルドの内容または最初のアプリケーションの内容?

ガイドによると、ビルドには Almond のカスタム バージョンが含まれているため、アプリに requirejs を読み込む必要はなく (イェイ!)、requirejs スクリプト タグを変更して main-built (. /build/app/ または ./app?? 内のもの)。

そのため、最初のアプリで 1 つを使用します。現在、index.html には 2 つのスクリプト参照しかありません。

<script type="text/javascript"  src="phonegap.js"></script>
<script src="./app/main-built.js"></script>

main.js で少しバック トラッキングします。deviceready がトリガーされて dom が読み込まれるまで、アプリが起動しないようにする方法を考え続けました。このyoutube ビデオを見て、みんなのコードからヒントを得たので、最適化前の main.js の一部は次のようになります。

requirejs.config({
paths: {
    'text': '../lib/require/text',
    'async': '../lib/require/async',
    'domReady': '../lib/require/domReady',
    'durandal': '../lib/durandal/js',
    'plugins': '../lib/durandal/js/plugins',
    'transitions': '../lib/durandal/js/transitions',
    'knockout': '../lib/knockout/knockout-2.3.0',
    'bootstrap': '../lib/bootstrap/js/bootstrap',
    'jquery': '../lib/jquery/jquery-1.9.1',
    'jpanelmenu': '../lib/jpanelMenu/jquery.jpanelmenu.min'
},
shim: {
    'bootstrap': {
        deps: ['jquery'],
        exports: 'jQuery'
    }        
}
});


define(['domReady', 'durandal/system', 'durandal/app', 'durandal/viewLocator', 'scripts/dealtag'], function (domReady, system, app, viewLocator, dealtag) {

domReady(function () {
    var useragent = navigator.userAgent.toLowerCase();

    if (useragent.match(/android/) || useragent.match(/iphone/) || useragent.match(/ipad/) || useragent.match('ios')) {
        document.addEventListener('deviceready', onDeviceReady, false);
    }
    else {
        onDeviceReady('desktop');
    }
});

function onDeviceReady(desktop) {
    if (desktop !== 'desktop')
        cordova.exec(null, null, 'SplashScreen', 'hide', []);

    app.title = 'My App';
    app.configurePlugins({
        router: true,
        dialog: true,
        widget: true
    });

    app.start().then(function () {
        //Replace 'viewmodels' in the moduleId with 'views' to locate the view.
        //Look for partial views in a 'views' folder in the root.
        viewLocator.useConvention();
       ....my own initialization code

    });
}
});

最適化後に戻って、最適化に含まれていなかったビルド + 私の css フォルダーの内容を www フォルダーにコピーし、phonegap local build android; を実行します。次に、これを Android デバイスにデプロイします。アプリの最初のページ (登録ページ) は正常に読み込まれ、logcat では、独自の console.log チェック ポイントのいくつかを含む、ブラウザー コンソールで確認できるものと同じ内容が多数確認できます。ただし、リンクをクリックして他のページに移動すると、デバイスに白い画面が表示され、logcat で次のような終わりのないエラーが表示されるだけです ログキャット

durandaljsを使用してAndroid用に開発している人がたくさんいるようです。ご協力いただきありがとうございます。

4

1 に答える 1

1

「混乱」の原因が何であるかを突き止めました。durandaljs に移行する前に Sammyjs でルーティングを行っていた場合も、この混乱に陥る可能性があります。sammyjs では、ビューの href 属性にルートがあると、リンクのように機能し、対応するルートに自動的に移動します。このようなもの

<a href="#mypage">My Page</a>

またはkoバインディングで

<a data-bind="attr: {href: '#mypage/' + id}"></a>

これはdurandaljsを凶暴にします!デュランダルでは、このようなビューモデルに関数を作成します

define(['plugins/router', 'knockout'], function (router, ko) {
var myviewmodel= function () {
    this.list= ko.observableArray();
}
....
myviewmodel.prototype.showItem = function (item) {
    router.navigate('mypage/' + item.id);
}

return myviewmodel;
});

そして、あなたの見解では、あなたは持つことができます

<a data-bind="click: $parent.showDeals"> <!-- if within a list context -->

また

<a data-bind="click: showDeals">

これが、問題が何であるかを理解しようとして何時間も果てしなく経験しなければならなかった不必要な悲しみを誰かが救うことを願っています.

于 2013-10-28T22:53:53.243 に答える