2013-04-11 110 views
0

我有一个自定义小部件无法正常工作。它正在被实例化,但它不会调用postCreate函数。我没有收到任何错误消息。dojo自定义小部件不会调用postCreate

我已删除从窗口小部件用于测试目的的任何额外的代码,这里是生成的代码:

define(["dojo/_base/declare", 
     "dojo/_base/lang", 
     "dijit/_WidgetBase", 
     "dijit/_TemplatedMixin", 
     "dijit/_WidgetsInTemplateMixin", 
     "dojox/mobile/Button", 
     "dojo/text!pgonline/widgets/AttributeInspector/templates/AttributeInspector.html"], 

    function(declare, 
      lang, 
      _WidgetBase, 
      _TemplatedMixin, 
      _WidgetsInTemplateMixin, 
      Button, 
      template) { 

     return declare("AttributeInspector2", [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], { 

      templateString : template, 
      baseClass : "AttributeInspector2", 
      postCreate : function() { 
       dojo.connect(this, "onBeforeTransitionIn", lang.hitch(this, this.onPageLoad)); 
      }, 

      onPageLoad : function() { 
      } 
     }); 
    }); 

我可以告诉它被实例化,因为当我在Chrome的调试,我可以设置断点行:templateString : template,它将在该断点处停止,但它不会停止在postCreate函数内的代码的断点处。该模板本身是一个简单的HTML文件,其中包含几个div和一个dojox.mobile.button

UPDATE:

下面是实例代码:

require(["pgonline/widgets/AttributeInspector2"], function(AttributeInspector) { 

    var att = new AttributeInspector({}); 

att.placeAt("attributeInspector"); 
att.startup(); 

}); 
+0

请问你的widget类实例化?解析器?编程? – BuffaloBuffalo 2013-04-11 15:33:01

+0

@BuffaloBuffalo - 我添加了实例代码的帖子。 – Brian 2013-04-11 15:38:08

+0

你能在jsfiddle中模仿这种行为吗?我[设置这一个](http://jsfiddle.net/H7Zh8/39/)类似于你的(不同的事件处理程序和模块,但相同的部件设置和实例化),并按预期工作。 – Default 2013-04-11 15:55:14

回答

2

这可能是关闭基地,但基于您的fiddle,在控制台中的错误是Uncaught Error: Invalid template

您的模板看起来像这样:

<div> 
    <button data-dojo-attach-point='prevButton' data-dojo-type='dojox.mobile.Button'></button> 
    <button data-dojo-attach-point='nextButton'></button> 
</div> 
<div data-dojo-attach-point='attributes'></div> 

Dijit的需要模板,有一个根node--这样一个解决方法,只需添加一个包含分区的模板

<div> 
    <div> 
     <button data-dojo-attach-point='prevButton' data-dojo-type='dojox.mobile.Button'></button> 
     <button data-dojo-attach-point='nextButton'></button> 
    </div> 
    <div data-dojo-attach-point='attributes'></div> 
</div>