一切都“准备好”时,Dojo Widget需要事件

时间:2010-04-22 09:21:11

标签: javascript dojo

我在dojo中有一个自定义小部件。我的问题是检查传递给小部件的某种访问规则。

如果在窗口小部件完全加载后检查规则,一切正常。但是我必须在显示之前删除一些文本和按钮。

我已经尝试了启动,并且创建了一个钩子( - :是否有类似“aftercreate”的内容?

2 个答案:

答案 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
    }
  }

}