2014-01-17 8 views
0

Как вы завершаете скрипт polyfill как модуль AMD и условно загружаете его с помощью Modernizr и RequireJS?RequireJS: Условно загрузить Polyfill с помощью Modernizr

(Фигурный его в то время как я был разработка моего вопроса. - разместить ответ для тех, кто еще пытается сделать то же самое)

ответ

0

polyfill мне нужно загрузить была jquery-placeholder для браузеров, которые не поддерживают входные заполнители. Он не поддерживает AMD.

Сначала я завернул его в качестве модуля AMD, как это:

define(['jquery'], function ($) { 
    (function(window, document, $) { 
    ... polyfill ... 
    }(this, document, jQuery)); 
}); 

Тогда в main.js я использовал Modernizr условно require() сценарий polyfill:

require(['jquery', 'modernizr'], function ($, Modernizr) { 
    if (!Modernizr.input.placeholder) { 
    require(['jquery', 'placeholder'], function ($) { 
     $('#input').placeholder(); 
    }); 
    } 
}); 
+3

в вашем примере вы требует JQuery дважды , Если jQuery-заполнитель - единственная причина, по которой требуется jQuery, то в первом случае мне потребуется только Modernizr, а не jQuery. Кроме того, использование [RequireJS shim] (http://requirejs.org/docs/api.html#config-shim) вместо копирования исходного кода поставщика внутри оболочки модуля считается более практичным, поскольку вы оставляете код поставщика как есть и может заменить его в любой момент. –