2013-03-05 17 views
0

我正在尝试为我的web应用程序中的地图开发一个内容样式小部件的表格。这些小工具在Chrome和FireFox中运行得非常好,但在Internet Explorer 8中无声无息(我在开发此应用程序时已经阅读过很多次了)。构建生命周期的BuildRendering和PostCreate方法。该小部件是使用图结构创建的,因此它是递归的。有没有人有任何想法可以导致小部件生命周期的这两种方法之间的失败?Dojo小工具 - BuildRendering和PostCreate之间的无声失败

我在某些地方看过这个模板可能是个问题,所以我将它包含在我的节点代码中。

这里的小部件的简化版本,所以你也许可以得到所发生的事情的想法:

define(['dojo/_base/declare', "dijit/_WidgetBase", "dijit/_TemplatedMixin", 
     "dijit/_WidgetsInTemplateMixin", "dojo/text!./templates/_Node.html"], 

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

    var _Node = declare ([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], { 

     templateString : template, 
     _childNodes : [], 

     constructor : function (params, srcNodeRef) { 
      lang.mixin(this, params); 
      this.inherited(arguments); 
     }, 

     buildRendering: function(){ 
      this.inherited(arguments); 
      // Execution leaves this function but never launches postCreate() 
      // buildRendering is not actually there in my code, I just have it here for 
      // debugging this particular problem. 
     }, 

     postCreate : function() { 
      // Execution never reaches this point in IE8 (probably 7 and 9 as well) 
      var newParams = { 
       "Para1": "Value1", 
       "Para2": "Value2" 
      } 
      var newNode = new Node(newParams, this.containerNode); 
      this._childNodes.push(newNode); 
     } 
    }); 

    return _Node; 

}); 

而且这里是它的使用模板:

<div> 
    <div data-dojo-attach-point="rowNode" data-dojo-attach-event="onclick:_onClick"> 
     <span data-dojo-attach-point="contentNode"> 
      <span data-dojo-attach-point="checkContainerNode"></span> 
      <img src="${_blankGif}" alt="" data-dojo-attach-point="iconNode"> 
      <span data-dojo-attach-point="labelNode"></span> 
     </span> 
    </div> 
    <div data-dojo-attach-point="containerNode" style="display: none;"></div> 
</div> 

所以我的节点遵循这一结构,但就像我说的,在Internet Explorer中buildRendering和postCreate之间默默无闻。我已经花了很多时间了。我希望有人能在这里帮我一把。

请不要看太多的语法,我复制我的代码的粘贴部分,但为了清晰起见,我对其进行了大量修改。

感谢,

Ggilmann

+0

我不能说我的答案会解决您的问题,但我只列出了一些我在查看代码时注意到的事情。 – 2013-03-06 00:57:47

+0

我已经复制了你的代码,并在Firefox和IE8中运行它,它似乎在两者中都完美运行。已经尝试运行在IE7模式,怪癖模式,兼容模式等等,都工作。我猜测什么是突破这是没有包括在上面的修改版本。我敢打赌,模板中的某些东西正在破坏它,因为在buildRendering期间这些东西正在被提取和包含。试图通过不包含_onClick()类方法或_blankGif属性来破解它,但这些在IE8中没有特别的破坏性。 – 2013-03-06 08:45:07

回答

1

你不必调用this.inherited(arguments);在构造函数中。 Dojo会自动链接构造函数。

http://dojotoolkit.org/reference-guide/1.8/dojo/_base/declare.html#id8

您还需要添加this.inherited(arguments);postCreate

您的模板没有<img>的结束标记。

+0

感谢您的帮助,我会再次尝试所有这些明天。我说重试,因为我有,不幸的是已经尝试了所有的建议。关闭img我读的地方,它不是必需的,所以我尝试了或不。我最初尝试不用的继承的调用,并将它们添加为我尝试的最后一件事。 postCreate中的继承,虽然可能需要,但不会被调用,因为它永远不会进入后创建。有点悲观主义者,但我会明天再试一遍。 – Ggilmann 2013-03-06 01:06:34

+1

不需要关闭HTML5中的img(假设HTML5,如果XHTML,那么它应该包括在内)。另外,我从不使用this.inherited(参数)(如果可能),因为在使用“use strict”时它不起作用。你的班级应该没有任何这些工作(大多数情况下,当然也有例外)。不应该需要构造函数中的lang.mixin(this,params),因为Dojo应该这样做。我会抛弃构造函数方法(除非你在那里运行更多的代码,以便让你的问题更容易理解)。 – 2013-03-06 08:49:49