2015-10-01 2 views
0

Есть ли типы имен классов нагрузки в качестве переменных? new window[a], похоже, не работает. Я получаю ошибку TypeError: window[a] is not a constructor.RequireJS загружает динамические зависимости как переменные

require([ 
    'myController' 
], function (myController) { 
    // this is working fine 
    // new myController().init(); 

    $(function() { 
     var a = $('.test').attr('class'); // this returns myController 
     new window[a]; // error here 
    }); 
}); 
+0

Что находится в 'window [a]' Вы сохраняете имена классов в качестве свойств в глобальной области? Например, если 'window [a]' имеет строку '' Foo '', вы хотите запустить 'new Foo()'? – mikhail

+0

Да, вы поняли это правильно. – basagabi

ответ

-1

Чтобы сделать то, что вы хотите, вы должны использовать eval так:

eval("new " + window[a] + "()"); 

Рабочий пример: https://jsfiddle.net/ybjo4pn9/


ПРИМЕЧАНИЕ:Use eval with caution.

+1

Возможно, это было связано с использованием eval(). Но иногда это лучший способ решить проблему. Здесь есть продолжительная дискуссия: «Когда JavaScript eval() не злой?» - http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil –

+0

Это единственная причина, о которой я могу думать. Но я дал непредвзятый ответ о том, как решить эту проблему без серьезных архитектурных изменений. Я бы никогда не использовал это в своем собственном коде. – mikhail

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