为dojo小部件给予“id”是一个好的做法吗?

uqxowvwt  于 2022-12-08  发布在  Dojo
关注(0)|答案(2)|浏览(202)

我在我的项目中使用Dojo 1.9。我一直遵循一种方法,即为我使用的每个dijit给予“id”。例如:

var cp = new dijit.layout.ContentPane({\
 id:"myContentPane",
content:"Test"
});

分配一个id是一个好的做法吗?我这样做的原因例如,如果我想用一个新的内容重新加载cp,我会检查(通过id)是否已经创建了cp。如果是,我就设置内容,如果不是,我就创建它。所以上面的代码被更改为

if(!dijit.byId("myContentPane"){
var cp = new dijit.layout.ContentPane({\
 id:"myContentPane",
content:"Test"
});
}else{
dijit.byId("myContentPane").set("content","new content");
}

所以我用id来检查dijit是否已经创建了。很少用id来破坏dijit。
祝你好运,曼珠

bxgwgixi

bxgwgixi1#

这是一个非常私人的选择。
然而,根据经验,在由多个独立Dojo模块组成的复杂单页面应用程序上,ID是非常脆弱的。
在我正在工作的项目中,我完全禁止了它们,取而代之的是我依赖于附件点、类属性和小部件API。
在你的例子中,我假设var cp = new dijit.layout.ContentPane({在一个小部件中,所以我会这样做:
_setContentAttr: function(content) { if(!this._contentPane) { this._contentPane = new dijit.layout.ContentPane({content: content}); } else { this._contentPane.set('content', content); } }
这样我就再也不用依赖ID了。
结论是:这取决于您的项目及其复杂性。

  • 对于简单的项目,为什么不使用ID呢?
  • 在复杂的一个,它越来越脆,你最好不要。

顺便说一句,由于Dojo 1.9使用AMD,您还应该避免使用“dijit.layout.ContentPane”,而应该使用变量:
require(["dijit/layout/ContentPane"], function(ContentPane){ var cp = new ContentPane(); });

zazmityj

zazmityj2#

我认为通过一个独特的小部件来识别你的小部件总是一个好主意,一个原因是:

  • 您可以使用dijit/registry以简单而简洁的方式检索小部件,而无需查询DOM。

用法示例:

require(["dijit/registry"], function(registry){
    var widget = registry.byNode(domNode);
});

相关问题