我在dojo中有一个自定义小部件。我的问题是检查传递给小部件的某种访问规则。
如果在窗口小部件完全加载后检查规则,一切正常。但是我必须在显示之前删除一些文本和按钮。
我已经尝试了启动,并且创建了一个钩子( - :是否有类似“aftercreate”的内容?
答案 0 :(得分:3)
我能想到的第一个解决方案是先隐藏受限制的元素,然后将其删除。
在css:
.hidden{ display: none }
在小部件的模板中,所有权限敏感元素:
<div class="${permissionsSensitiveElementsClass}">...</div>
在小部件的代码中:
permissionsSensitiveElementsClass: "",
postMixInProperties: function(){
if(!this.hasPermissions()){
this.permissionsSensitiveElementsClass = "hidden";
}
this.inherited(arguments);
},
startup: function(){
// remove elements if necessary
},
hasPermissions: function(){
// permissions check
},
答案 1 :(得分:3)
最终的渲染功能是startup()。对于最初隐藏的小部件,在调用show()时会自动调用启动。 dijit.layout.Container具有'addChild( widget )'功能,当添加/ multiple子(ren)时,它将触发 widget .startup()。
你会受益于: http://dojotoolkit.org/documentation/tutorials/1.6/understanding_widget/
小部件生命周期:
([widget].constructor());
[widget].postscript();
[widget].create();
[widget].postMixinProperties();
[widget].buildRendering();
[widget].postCreate(); // this is the most important one!
[widget].startup();
你的问题的真正答案就在这里;
dojo.declare("mydijit", ["dijit/_Widget"], {
startup: function() {
// call superclass functionality before applying hide on specific elements
this.inherited(arguments);
if(foo) dojo.destroy(this.fooNode);
if(bar) dojo.destroy(this.barNode);
},
onShow: function() {
if(foo.changed || bar.changed) {
// act upon it
}
}
}