2014-10-29 3 views
1

Я хочу создать расширение requirejs, что бы идеально выглядеть примерно так:RequireJS Откат или проверки файла существования

var versions = ['one', 'two', 'three']; 

define({ 
    load: function (name, req, onload, config) { 
     var load = function (version) { 
      try { 
       req([name + '.' + versions[version]], function (value) { 
        onload(value); 
       }); 
      } catch(ex) { 
       if (version === versions.length - 1) 
        throw err; 
       load(version + 1); 
      } 
     }; 

     load(0); 
    }); 
}); 

В принципе, я хочу сделать это:

require(['plugin!my/file'], function (dep) { 

}); 

И за кулисами логика должна быть:

Проверьте мой/file.one.js. Если он существует, верните его. Если нет ...

Проверьте наличие у меня/file.two.js. Если он существует, верните его. Если нет ...

Проверьте наличие у меня/file.three.js. Если он существует, верните его. Если нет ...

Throw

Проблемы, кажется, что ошибки для запроса файлов, которые не существуют, брошенные из req являются асинхронными, так что не могут быть пойманы на этом пути.

Какие-либо рекомендации по выполнению такого рода функций?

Я нашел requirejs fallbacks, но они работают только для путей, определенных в вашем запросе. Я хочу, чтобы тот же самый тип функциональности для стандартного требовал вызова.

Я также нашел и , но опять же, похоже, работает только на модули, определенные через require.config или после попытки загрузить данный модуль.

ответ

1

Мне кажется, вы хотите использовать errback. Так что-то вроде этого:

var versions = ['one', 'two', 'three']; 

define({ 
    load: function (name, req, onload, config) { 
     var load = function (version) { 
      req([name + '.' + versions[version]], function (value) { 
       onload(value); 
      }, 
      function (err) { 
       if (version === versions.length - 1) 
        throw err; 
       load(version + 1); 
      }); 
     }; 

     load(0); 
    }); 
}); 

errback является второй функцией передается req. Он будет вызываться при загрузке модуля.

+0

Это идеальное решение. Не знал, что существует ошибка. Благодаря! –

+0

Это все еще вызывает ошибку, если файл не существует – vher2

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