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

     2023-02-16     212

关键词:

【中文标题】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 重复 ID 错误

】以编程方式(但不是以声明方式)实例化小部件时出现Dojo重复ID错误【英文标题】:DojoduplicateIDerrorwheninstantiatingawidgetprogrammatically,butnotdeclaratively【发布时间】:2015-07-1420:43:53【问题描述】:我正在使用Dojo1.10。我正在尝试测... 查看详情

Dojo vs JQuery 编程小部件创建

】DojovsJQuery编程小部件创建【英文标题】:DojovsJQueryprogrammaticwidgetcreation【发布时间】:2011-07-0516:05:53【问题描述】:我最近对​​Dojo进行了试验,并发现在标记中给定一个dom节点,我可以以面向对象的方式构建整个UI树,即以... 查看详情

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

】如何在Sharepoint的c#非可视Web部件中以编程方式创建进度更新控件【英文标题】:Howtocreateprogressupdatecontrolprogramaticallyinc#nonvisualwebpartinSharepoint【发布时间】:2013-01-1415:25:32【问题描述】:?我正在使用c#,目标是在ProgressUpdate控... 查看详情

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

】检测与以编程方式创建的ImageView的碰撞【英文标题】:DetectCollisionwithProgrammaticallyCreatedImageView【发布时间】:2017-03-1720:50:25【问题描述】:在viewDidLoad中,我正在使用代码以编程方式创建13个块:for(intX=1;X<=13;X++)UIImageView*iceBl... 查看详情

RecyclerView 与以编程方式创建的视图:哪个更好?

】RecyclerView与以编程方式创建的视图:哪个更好?【英文标题】:RecyclerViewvsProgrammaticallyCreatedViews:Whichoneisbetter?【发布时间】:2019-06-0407:50:14【问题描述】:我想列出我从firebase数据库中提取的项目。我为此使用了RecyclerView,但... 查看详情

在 Flutter 中的小部件之间传递数据的最佳方式

】在Flutter中的小部件之间传递数据的最佳方式【英文标题】:ThebestwaytopassingdatabetweenwidgetsinFlutter【发布时间】:2018-08-0107:45:59【问题描述】:我开发了自己的自定义小部件,用于其他视图。在这个自定义小部件中,我有一个存... 查看详情

Dojo RadioButton,以编程方式设置组

】DojoRadioButton,以编程方式设置组【英文标题】:DojoRadioButton,setupagroupprogrammatically【发布时间】:2011-11-1410:39:07【问题描述】:我有一个带有三个单选按钮的自定义小部件“MyWidget”,我希望属于同一个“组”。如果我在模板文... 查看详情

以声明方式对 Dojo DataGrid 进行排序

...我想在加载数据时设置排序。我发现的所有示例都涉及以编程方式执行此操作,并暗示它应该以声明方式可行。这是创建数据源的代码。<head><title>U 查看详情

Gatsby-plugin-image 与以编程方式创建的页面问题

】Gatsby-plugin-image与以编程方式创建的页面问题【英文标题】:Gatsby-plugin-imagewithprogrammaticallycreatedpagesissue【发布时间】:2021-06-0920:47:59【问题描述】:我正在gatsby中从MD文件以编程方式创建页面。我遇到的问题是我正在使用fromgat... 查看详情

iOS - 以编程方式创建今日小部件扩展

】iOS-以编程方式创建今日小部件扩展【英文标题】:iOS-createatodaywidgetextensionprogrammatically【发布时间】:2019-10-0717:06:30【问题描述】:我正在尝试创建一个今天的小部件。我不想使用情节提要。我按照page的说明进行操作。我删... 查看详情

如何在 Flutter 中以编程方式从外部打开滑动小部件

】如何在Flutter中以编程方式从外部打开滑动小部件【英文标题】:HowtoopenslideblewidgetprogrammaticallyfromtheoutsideinFlutter【发布时间】:2021-11-0409:23:48【问题描述】:我有一排ListTiles有Slidable作为他们的孩子。我需要通过AppBar中的操作... 查看详情

如何使用 PnP JS 在 SharePoint Online 中以编程方式添加页面/Web 部件区域/Web 部件?

】如何使用PnPJS在SharePointOnline中以编程方式添加页面/Web部件区域/Web部件?【英文标题】:Howtoaddpages/web-partzones/web-partsprogrammaticallyinSharePointonlineusingPnPJS?【发布时间】:2021-07-0108:05:33【问题描述】:我已经创建了页面,然后使用... 查看详情

使用 RemoteView 删除 Widget 中以编程方式生成的布局

】使用RemoteView删除Widget中以编程方式生成的布局【英文标题】:RemoveprogrammaticallygeneratedlayoutinWidgetusinRemoteView【发布时间】:2021-11-0717:16:01【问题描述】:我正在为Android创建一个小部件,但我遇到了问题。我的主要小部件布局... 查看详情

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

】如何编写我的小部件而不在dojo.ready中声明它的代码【英文标题】:Howtowritemywidgetwithoutdeclaringit\'scodeindojo.ready【发布时间】:2011-08-0409:08:06【问题描述】:使用一些教程,我编写了简单的小部件,但它导致错误“declarecustomwidget... 查看详情

如何在android中以编程方式更改应用小部件中的图像

】如何在android中以编程方式更改应用小部件中的图像【英文标题】:Howtochangetheimageinappwidgetprogrammaticallyinandroid【发布时间】:2013-01-1321:49:14【问题描述】:我设计了一个android应用小部件,其中两个ImageView我想在单击图像以及调... 查看详情

在颤动中以编程方式关闭模态底部表

】在颤动中以编程方式关闭模态底部表【英文标题】:Closemodalbottomsheetprogrammaticallyinflutter【发布时间】:2018-09-2113:30:24【问题描述】:我正在通过showModalBottomSheet&lt;Null&gt;()和几个带有GestureDetector的小部件显示一个BottomSheet... 查看详情

在 Unity 中以编程方式创建动画?

】在Unity中以编程方式创建动画?【英文标题】:CreateanimationsprogrammaticallyinUnity?【发布时间】:2021-05-1701:55:22【问题描述】:在我的游戏中,我有一个很大的装备目录:盔甲、武器和盾牌。这些之间的组合可能非常巨大。除此之... 查看详情

如何以编程方式清除 ConstraintLayout 中的小部件(例如 ImageView)的约束?

】如何以编程方式清除ConstraintLayout中的小部件(例如ImageView)的约束?【英文标题】:HowtoclearconstraintsofWidgets(e.gImageView)insideConstraintLayoutprogrammatically?【发布时间】:2020-05-0210:55:58【问题描述】:我到处搜索,HowtoclearconstraintsofW... 查看详情