代码之家  ›  专栏  ›  技术社区  ›  opHASnoNAME

当一切都“准备好”时,dojo小部件需要事件

  •  1
  • opHASnoNAME  · 技术社区  · 15 年前

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

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

    我试过启动,创建后挂接(—:是否有类似“aftercreate”的内容?

    2 回复  |  直到 13 年前
        1
  •  3
  •   Kniganapolke    15 年前

    我能想到的第一个解决方案是从隐藏受限元素开始,然后删除它们。

    在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
    },
    
        2
  •  3
  •   mschr    13 年前

    最后一个呈现函数是startup()。对于最初隐藏的小部件,在调用show()时会自动调用startup。dijit.layout.container有'addchild( 小装置 )'功能,它将启动 小装置 .startup(),当添加多个子(ren)时。

    你可以从中受益: 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
        }
      }
    
    }