我几年来一直是dojo(核心)用户。在dojo空间顶部构建自己的小部件;忽视了dijit和dojox。在我自己的世界里工作。这有它的优点,但我一直觉得我正在重新发明轮子,同时建立另一个标签面板,旋转木马或对话框。所以我决定使用dijit。
使用我自己的小部件,我设置了一些基本的规则:
问题:
Dijit有两种实例化方式:声明式和编程式。无论哪种方式似乎打破了其中一条规则。
一个。 声明实例化:
看起来像是:
<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)。
湾程序化实例化:
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&amp; 2被打破了。 (1)无可访问性或SEO值(2)设置模板后,浏览器需要重绘整个页面。
问题:使用dijit是否可行(并且实用),仍然遵循规则?
答案 0 :(得分:1)
是的,这既可行又实用。但是,您的规则#2使得任何预先构建的Dijit开箱即用非常困难,因为它们被设计为附加到节点并使用“Dojo样式”重建它。您可以通过将节点设置为看起来像最终结果来解决这个问题 - 但这似乎比它的价值更麻烦,但这将是遵循此规则并且仍然使用一些必要组件的唯一方法(即很难自己做)像FilteringSelect。
主要是因为#2,我建议你不使用* dijit._Templated *。只需使用* dijit._Widget *,而不是使用内部HTML,只需附加到文档中的现有HTML即可。
也许你可以弯曲#2,并允许它被修改和重新设计,但不是太多,以至于它改变了DOM对搜索引擎或语音阅读器的看法。
我自己从不做#3,所以希望这不应该很难。
对于#1,它取决于小部件。您可以使用标准浏览器选择并使用Dojo将其升级到FilteringSelect。