0

質問の背景情報

そこで、昨年クライアント向けのアプリケーションを作成しました。プロジェクトの途中で、多くの非同期機能が必要になることに気づき、サイトの機能の多くをjavascriptに移行して書き始めました。私は開発環境でかなり大きな問題に遭遇し、時間を節約するためだけにphpファイル内に多くのjavascriptを含めることになりました。

プロジェクトをクライアントに渡す前に、私はすべてのJavaScriptを、サイトのさまざまな領域によってのみ分割された個別のファイルに移動しました。そのため、admin.js、checkout.js、common.jsなどになりました。

実際の問題

クライアントはサイトに機能を追加したいと考えています。先に進んで、JavaScriptを別のファイルに正しく構造化し、モデルコードをビューコードから分離したいと思います。

requirejsを使用したいので、すべてのページのフッターに大量のスクリプト呼び出しがなく、依存関係をより適切に処理します。

私が抱えている特定の問題は、ファイルが正しくロードされていないように見えることです。

私のmain.jsファイル

require.config({
  paths: {
    'course'    : 'models/course',
    'login_view': 'views/login/login_view',
    'config'    : 'config',
    'views'     : 'views/views',
    'session'   : 'models/session'
  }
});

require(['login_view'], function(login_view){
  login_view.init();
});

私のlogin_view.jsファイル

define(function() {
  var login_view = {
    init: function(){
      console.log(this);
    });
  };
});

開発サーバーにアプリケーションをロードすると、このエラーが発生します。Uncaught TypeError: Cannot call method 'init' of undefined

どんな助けでもいただければ幸いです。

4

1 に答える 1

2

モジュールは、必要なモジュールが操作できるインターフェースを公開する必要があるため(名前の混乱を避けるために変数名が置き換えられます):

//login_view.js
define(function() {
  var opBoard = {
    init: function(){
      console.log('I am initted!');
    });
  };

  //expose opBoard containing init
  return opBoard;
});

//so if i required in require or depended in another module
require(['login_view'],function(lv){
  //lv is the exposed opBoard from the `login_view` module
  lv.init();
});
于 2013-01-11T18:46:56.537 に答える