Я уже несколько лет являюсь пользователем dojo (core). Построение собственных виджетов на пространстве додзё; пренебрегая dijit и dojox. Работа в моем собственном мире. Это имело свои преимущества, но у меня было ощущение, что я изобретаю колесо, создавая еще одну панель с вкладками, карусель или диалоговое окно. Поэтому я решил использовать диджит.Изящная деградация с Dijit
С моих собственных виджетов, я установил некоторые основные правила:
- Виджет должен ухудшать грациозно [когда нет JS не загружен] для обеспечения доступности и SEO
- Там не должно быть никаких перерисовки после JS загружается (который всегда включен на странице после того, как все HTML, непосредственно перед телом закрывающего тега)
- Нет инлайн JS (сценарии должны быть отделены от HTML)
Задача:
У Dijit есть два способа создания: декларативно и программно. В любом случае, похоже, нарушается одно из правил.
a. декларативная конкретизация:
выглядит как что-то вроде:
<div dojoType="MyFirstWidget">
<ul>
<li dojoAttachPoint="counter">0</li>
<li><a dojoAttachEvent="_updateCounter" href="#">Update</a></li>
</ul>
<script type="dojo/connect" event="onClick" args="evt">
console.log("This will execute after of the Button dijit's onClick method has been called.");
</script>
</div>
Как вы можете видеть, это явно нарушает 3-е правила (нет встроенного JS).
b. Programmatic конкретизации:
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.declare("MyFirstWidget", [dijit._Widget, dijit._Templated], {
templateString: "<div class='awesome'>0</div>",
postCreate: function() {
console.log("postCreate");
}
});
(new MyFirstWidget()).placeAt(dojo.body());
И таким образом, правила 1 & 2 сломаны. (1) Отсутствие доступа или значение SEO (2) После того, как шаблон установлен, браузеру необходимо будет перерисовать всю страницу.
Вопрос: Возможно ли (и практично) использовать dijit и по-прежнему следовать правилам?