2013-01-05 140 views
1

我注意到一個奇怪的行爲與RequireJS試圖將單模值直接賦值給一個變量,像這樣的:RequireJS:需要一個模塊返回一個函數,而不是一個對象

App.tables = require(['appTables']); 

這樣做的結果調用是App.tables包含這樣的功能:

localRequire(deps, callback, errback) 

,而我的appTables.js看起來是這樣的:

define({ 
    users: { 
    name: 'tables.users', 
    data: { 
     name: { 
     visible: true, 
     hide: false, 
     display: 'Name' 
     }, 
     surname: { 
     visible: true, 
     hide: false, 
     display: 'Surname' 
     } 
    } 
    } 
}); 

事實上,試圖將其分配中的經典方式運行:

require(['appTables'], function(appTables) { 
    App.tables = appTables; 
}); 

那麼,什麼是錯我的第一種方法?爲什麼它會返回一個函數而不是對象?謝謝!

+0

你應該通過該模塊的名稱爲'require',而不是一個數組。所以:'App.tables = require('appTables');'應該按預期工作。 –

+0

感謝您的回覆,但它給了我以下錯誤:「錯誤:模塊名稱」appTables「尚未加載上下文:_。使用require([])」 – Ingro

+0

您需要將'require'包裝在當您使用簡化的CommonJS語法時,可以使用'define'塊。所以:'define(function(require){App.tables = require('appTables'); ...});'應該工作。請參閱:http://requirejs.org/docs/api.html#cjsmodule –

回答

3

您正在使用的簡化CommonJS格式(App.tables = require('appTables'))旨在用於模塊內,作爲將模塊依賴性數組分配給函數參數的amd格式的替代方法。它不是用於你的main.js模塊(只需使用標準的require('appTables', function(appTables) { ... });格式)。

在模塊中,你會包裝在definerequire通話,並通過模塊名稱('appTables'):

define(function(require) { 
    appTables = require('appTables'); 
    ... do something with appTables ... 
}); 

參見文檔上Simplified CommonJS Wrapper瞭解詳情。

參見:Why use alternate requirejs define: define(function(require) { ... }

+0

這給出錯誤「錯誤:不匹配的匿名定義()模塊」。這也可能導入這個模塊(或者至少查看它)每次使用這個功能是不理想的。 – Ben

相關問題