Можно ли комбинировать Dojo с другими структурами JS?

Мы используем Dojo (1.9.3) как структуру JS для создания одностраничного приложения. Однако мы тратим слишком много времени на причуды Dojo, поэтому даже простые задачи требуют много времени для реализации. И поскольку отсутствует надлежащая документация, нам часто приходится прибегать к чтению исходного кода, а затем к реализации обходного пути.

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

Структуры, которые я изучал, - в порядке того, что я предпочту, основываясь на моем коротком исследовании, но не стесняйтесь убеждать меня в другом.

  • Эмбер
  • Реагировать
  • Полимер
  • Angular (последний из-за того, что я боюсь капитального ремонта 2.0)

В то время как главный вопрос заключается в том, возможно ли это, пожалуйста, также совет, если вы считаете, что это плохая идея.

Ответ 1

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

Одним из возможных исключений, о которых я могу думать, является то, что любая из рассматриваемых фреймворков дополняет собственные прототипы, особенно Object, поскольку это повлияет на перечислимые свойства во всех объектах и ​​может нанести ущерб любым скриптам, которые используют для... в петли без hasOwnProperty.

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

Сказав это, я также посоветую вам взять "обещание" каркасов с солью - вы говорите, что прямо сейчас вы обнаруживаете, что реализация вещей с помощью Dojo требует усилий, и, естественно, рамки, которые вы перечисляете привлекательны, потому что они делают некоторые части разработки приложений легкими, предлагая шаблоны и условные обозначения, - но вопрос, который вы должны задать, заключается в том, насколько сложно ваша структура делает вашу работу в тот момент, когда вам нужно что-то делать за пределами или против этих конвенций? Dojo может иметь кривую обучения, но обычно это не мешает вам что-либо делать.

Ответ 2

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

Dijit

У меня только есть опыт работы с Ember.js и AngularJS, но общей концепцией в этих рамках является привязка данных. Связывание данных позволяет просто обновить модель, и представление будет отражать изменения в модели.
Однако, как правило, они не работают с виджетами. Виджеты (например, библиотека Dijit) создают свою собственную DOM, и из-за этого фреймворки, такие как Ember.js или AngularJS, не "знают" об этих изменениях и не могут обновить представление в этом случае.

Чтобы он работал, вам придется обернуть виджеты в компоненты (Ember.js) или директивы (AngularJS). Пример такой обертки можно найти в этом ответе.

Загрузка зависимостей

Загрузка зависимостей может быть запутанной. AngularJS поставляется со своей системой впрыска зависимостей и означает, что вам придется использовать загрузчик Dojo AMD для модулей Dojo и инъекции зависимостей AngularJS для AngularJS. Насколько мне известно, эти две работы прекрасно сочетаются (я видел примеры с загрузчиком RequireJS AMD, поэтому это должно быть возможно).

С Ember.js у меня было немного больше проблем, связанных с загрузчиком AMD. Создатель Ember.js(Tom Dale) не верит в AMD, и я видел несколько проблем, пытающихся загрузить компоненты Ember.js с загрузчиком AMD.

Все зависит от того, как вы хотите использовать эти фреймворки и какие дополнительные усилия вы хотите сделать. Для меня это похоже, что вы даже не уверены в том, что использовать эти фреймворки, поскольку React.js или Polymer имеют совершенно другую цель, чем, например, AngularJS или Ember.js.