2013-05-27 11 views
6

あります実行アクションすべてrequirejsモジュールがロードされた後、ページ上のいくつかのモジュール

// module 1 
require(['signalr'], function(s) { 
    s.subscribe('myhub1', function() { /* some code */ }); 
}); 

// module 2 
require(['signalr'], function(s) { 
    s.subscribe('myhub2', function() { /* some code 2 */ }); 
}); 

は、すべてのモジュールが呼び出された後に呼び出されるメソッドは、(すべてのsubscribtionsが行われます)があります:

require(['signalr'], fuinction (s) { s.connect(); }); 

可能な解決策は、モジュールを定義し、このように書きます:

// module 1 
define('module 1', ['signalr'], function(s) { 
    s.subscribe('myhub1', function() { /* some code */ }); 
}); 

// module 2 
define('module 2', ['signalr'], function(s) { 
    s.subscribe('myhub2', function() { /* some code 2 */ }); 
}); 
require(['signalr', 'module 1', 'module 2'], fuinction (s) { s.connect(); }); 

しかし、問題はそのDでありますifferentページが異なるモジュールを持っている、と言う:

page1.cshtml: モジュール1

page2.cshtml: モジュール1、モジュール2

だから私は書くことができません: は '[(signalrを必要とします'、'モジュール1 '、'モジュール2 ']、fuinction(s){s.connect(); }); モジュール2はpage2.cshtmlで定義されていない可能性があります。

+0

を構築することができるはずですか?それはこれを達成するための最高の方法と思われるでしょう。 –

+0

Intresting ..私はあなたに提案を試みます。ありがとうございました。 – Jekas

答えて

3

条件付きで配列を作成し、それをrequire関数に渡し、質問で述べたようにコールバックで補完を実行するのが最善の方法です。

var modulesToLoad = []; 

// Build the array 

require(modulesToLoad, function (s) { 
    s.connect(); 
}); 

シングルは、あなたがロードし、すべてがロードされていることを完了した上でチェックを実行し、その後、あなたのクリーンアップコードを実行するためのモジュールを追跡する必要があります必要に何らかの理由で、あなたの通話を集約できない場合

これについて考える
var checkIfLoaded = { 
    myhub1 : false, 
    myhub2 : false, 
    myhub3 : false 
} 

function checkIfReady(s) { 
    for (var prop in checkIfLoaded) { 
     if (! checkIfLoaded[prop]) { 
      return false; 
     } 
    } 

    // Completion code 
    s.connect(); 
} 

require(['myhub1'], function(s) { 
    checkIfLoaded.myhub1 = true; 
    checkIfReady(s); 
}); 

require(['myhub2'], function(s) { 
    checkIfLoaded.myhub2 = true; 
    checkIfReady(s); 
}); 

、あなたは条件付きページの要件に基づいて、アレイを構築し、必要機能を通じてそれを実行することができませんでした要件配列

+0

ありがとうございます。私は、条件付きで構築された依存モジュールの配列でアプローチを使用しました。 – Jekas