给予" id"是一种好习惯。对于dojo小部件?

时间:2017-03-20 22:01:05

标签: dojo dijit.layout

我正在为我的项目使用dojo 1.9。我一直在遵循一种方法,我给予" id"我使用的每个dijits。例如:

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。

此致 馒头

2 个答案:

答案 0 :(得分:1)

这是一个非常个人化的选择 但是,根据经验,在由多个独立的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(); });

答案 1 :(得分:0)

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

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

使用示例:

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