2015-04-07 4 views
3

У меня возникли проблемы с неопределенным переменным в моем модуле создан, лучше всего объяснить на примере, у меня есть:RequireJS странно неопределенный модуль

common.js (конфигурации для requirejs)

require([ 
    'module/polyfills/someModule' 
], function(
    module 
) { 

    module.init(); 

}); 

модуль/polyfills/someModule.js

define([ 
    'underscore', 
    'config', 
    'text!tpl/utils/textTemplate.html' 
    ], function(_, config, template) { 

    // ref 1 
    return { 
     init: function() { 
      // ref 2 
      // do stuff 
     }, 

     events: function() { 
      // add some events 
     }, 

    }; 
}); 

Если я ставлю точку останова на комментарий ref 1 Я могу видеть переменную config и ее свойства. Однако, если поставить точку останова на ref 2, то config не определено. Однако подчеркивание и шаблон не определены.

Я удалил что-нибудь особенное о конфигурации в моей требуемой конфигурации. Config выглядит следующим образом:

config.js

define([], function (clickType) { 
    return { 
     clickType: 'test' 
    }; 
}); 

Там нет ошибок в консоли, и я очень уверен, что это не циклическая зависимость!

+1

В каком браузере это происходит? И, пожалуйста, добавьте полный код 'init' к вашему вопросу. – Louis

+0

^+ 1, вы можете использовать шаблон внутри своего init, из-за которого он становится доступным, образуя закрытие. И это может быть не случай с конфигурацией. – Vishwanath

ответ

0

место комментария в ref2 является закрытием, в котором вы не получили доступ к конфигу. Функция создается при синтаксическом анализе, и это закрытие, независимо от того, какой доступ к нему доступен. простой тест, добавьте следующую строку кода в // ref2

var myConfig = config; 

Теперь вы увидите конфигурацию, как определено.

+0

Я знаю, что это сработает, но я не понимаю, что в 'ref 2' я могу получить доступ к' _' и 'template'. –

+0

_ можно объяснить ... он добавляет себя в область глобальных переменных, когда выполняется ... шаблон, тем не менее, удивляет ... –

Смежные вопросы