3

バックボーンを使用してphonegapでアプリを開発しましたが、jsが必要です。jquerymobilejsはメインjsからロードされます。

私の知る限り、requirejsはすべてのjsをロードします。<script>だから私は自分の中で使用してそれらを手動でロードする必要はありませんindex.html

私は何を探していませんか?ここでjqueryMobileライブラリをロードしたphonegap+バックボーンにjqmをロードする特定の方法はありますか?

require.config( {
  paths: {
        "jquery": "libs/jquery",
        "jquerymobile": "libs/jquerymobile",
        "underscore": "libs/lodash",
        "backbone": "libs/backbone"
  },
  shim: {

        "backbone": {
              "deps": [ "underscore", "jquery" ],
              "exports": "Backbone"  //attaches "Backbone" to the window object
        }
  }} );
require([ "jquery", "backbone", "routers/mobileRouter" ], function( $, Backbone, Mobile ) {
$( document ).on( "mobileinit",
    function() {
        $.mobile.linkBindingEnabled = false;
        $.mobile.hashListeningEnabled = false;
    }
)
require( [ "jquerymobile" ], function() {
    this.router = new Mobile();
}); } );

これは私のindex.htmlheadです。最初にモバイルjsを読み込んでいるので、ヘッダーのスタイルにjqmスクリプトは必要ありません。

<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<title>RideSmart App</title>
<script src="js/libs/require.js" data-main="js/mobile"></script>
<link rel="stylesheet" href="css/jqm1.3.0.min.css" />
<script type="text/javascript" charset="utf-8" src="jsLib/phonegap.js"></script>  
</head>
4

1 に答える 1

1

こちら'create'のドキュメントの「新しいマークアップの強化」セクションで提案されているように、Backboneがイベントをレンダリングした後、ページでイベントをトリガーする必要があると思います。

ただし、クライアント側で新しいマークアップを生成するか、Ajaxを介してコンテンツを読み込んでページに挿入する場合は、createイベントをトリガーして、新しいマークアップに含まれるすべてのプラグインの自動初期化を処理できます。これは任意の要素(ページdiv自体も含む)でトリガーできるため、各プラグイン(リストビューボタン、選択など)を手動で初期化する手間が省けます。

$( ...new markup that contains widgets... ).appendTo( ".ui-page" ).trigger( "create" );

Marionetteを使用している場合は、 MarionetteがonRender提供するフックをオーバーライドして、これを自動的に行うことができます。このようなもの:

// Override Marionette onRender and onShow events so JQM 'create' event is
// triggered on view's element. This ensures dynamically created content
// is given the jQuery Mobile treatment
Marionette.View.prototype.onRender = Marionette.View.prototype.onShow = function() {
  this.$el.trigger('create');
  return this;
};
于 2013-02-26T16:51:28.223 に答える