2012-12-13 46 views
1

我們正在構建使用RequireJS進行模塊化開發/依賴管理的Web應用程序。
我們踢的東西有以下幾點:RequireJS對模塊的回調依賴關係

<script data-main="js/main" src="js/libs/require/require.js"></script> 

的web應用程序也使用的是需要與主機系統通信的第三方的小程序。該applet具有一個回調函數,該函數在與其通信的api已初始化後執行,並將api對象作爲參數傳入。 例如

/* 
* This function is invoked automatically after the Reflection session has 
* completed its initialization. A reference to the JavaScript API is passed 
* in as a parameter. 
*/ 
function jsapiInitialized(api) { 

    return api; 

} 

基本上,上述需求是應用程序中許多模塊的依賴關係。

如何使上述函數成爲模塊依賴項,以便api對象可用於那些需要它的模塊?

回答

3

看來你想爲你的API使用像define這樣的異步方法。要用require.js來做,你需要create一個小插件。作爲結果,您將有以下文件:

1)myapi.js(API模擬文件)

// this is actually simulation of your third party code 
setTimeout(function() { 
    if(typeof jsapiInitialized === 'function') jsapiInitialized('hello!'); 
}, 1000); 

2)myplugin.js(插件,它處理您的API回調)

define(function(){ 
    return { 
     load : function(name, req, onLoad, config){ 
      window.jsapiInitialized = function(api) { 
       onLoad(api); 
      }; 
      require([name]); 
     } 
    }; 
}); 

3)main.js(測試你的插件)

require(['myplugin!myapi'], function(api){ 
    alert(api); 
}); 

(其中「myapi」可以是你真正的API腳本路徑)

+0

我們沒有獲得任何API腳本(即我所知道的),我們只需添加jsapiInitialized()到頁面並且applet調用它,傳入api參數。那是問題嗎? – Zengineer

+0

這對你來說沒有問題。你不需要修改任何東西。正如你所看到的'jsapiInitialized'函數是由這段代碼自動創建的:'window.jsapiInitialized = function(api){...'。當它被第三方腳本調用時,這個函數只需通過requirejs內部的API傳遞。 – Inferpse

+0

好的,因爲自動調用'jsapiInitialized',myapi.js是否需要?如果不是,'require()'參數在main.js中看起來如何? – Zengineer