dojo中以编程方式与以声明方式创建的小部件之间的区别?

Posted

技术标签:

【中文标题】dojo中以编程方式与以声明方式创建的小部件之间的区别?【英文标题】:Difference between programmatically vs declaratively created widgets in dojo? 【发布时间】:2013-10-18 02:22:07 【问题描述】:

我知道在 dojo 中我们可以通过两种方式创建任何小部件,

    以编程方式 声明式

要以编程方式创建小部件,我们将使用 javascript,而对于以声明方式,我们将使用 html 标记中的 dojo 属性。

谁能解释一下它们之间有什么区别?

哪一个最受青睐?为什么?

【问题讨论】:

【参考方案1】:

区别

嗯,两种方式之间存在一定的差异。在声明方式中,所有配置都基于 HTML 属性,如 dojo-data-props,但也有一些其他属性,如 value、title、...。因此,您创建的 DOM 节点实际上充当了某种占位符。

当您通过编写 JavaScript 代码创建小部件时,您必须提供 DOM 节点,您也将附加它,但最大的区别是它不会从该 DOM 节点复制 HTML 属性。此处的 DOM 节点仅用作容器,而不是占位符。


首选

没有最受青睐的解决方案,它通常取决于您的应用程序的要求以及您认为最简洁的开发方式。

我个人喜欢声明性标记,因为最终它是用户界面的一部分。但是,您可以随心所欲地走多远。我也看到有人以声明方式创建商店和小部件事件处理程序,但我个人更喜欢用 JavaScript 编写它们,因为它们不是用户界面的一部分。

还有其他原因可能会改变您创建小部件的方式。例如,声明性标记的最大缺点之一是您需要解析页面(例如使用parseOnLoad)。这通常比以编程方式创建小部件要慢。您可以通过仅解析某些 DOM 节点来改进它,但是您必须编写额外的代码(而且它仍然不会更快)。

只是一个小提示;这并不意味着声明方式很慢。这只是一个应该执行的额外操作,因此速度会慢一些,但最终用户可能甚至看不到差异。

然而,声明方式的一个优点是,在加载页面时,最终用户能够看到占位符。如果您选择了正确的占位符(例如,<select> 代表 dijit/form/FilteringSelectdijit/form/ComboBox),最终用户至少会看到一些东西。如果您以编程方式创建所有内容,最终用户将看到一个空白页面,直到 JavaScript 代码被执行。

因此,如果性能是要求之一,那么您可以选择以编程方式创建它们。如果您希望将表示层与业务逻辑分离的代码分离,那么我建议使用声明式方式。

但最后,两种解决方案都很好。

【讨论】:

以上是关于dojo中以编程方式与以声明方式创建的小部件之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

在Android中以编程方式刷新时被其他内容替换的小部件

Dojo vs JQuery 编程小部件创建

如何编写我的小部件而不在 dojo.ready 中声明它的代码

如何在 Sharepoint 的 c# 非可视 Web 部件中以编程方式创建进度更新控件

Dojo RadioButton,以编程方式设置组

检测与以编程方式创建的 ImageView 的碰撞