Javascript Dojo小部件-BuildRendering和PostCreate之间无提示失败
我正在尝试为我的web应用程序中的地图开发一个目录样式的小部件。这些小部件在Chrome和FireFox中运行得很好,但在InternetExplorer8中却悄无声息地失败了(我在开发这个应用程序时已经读了很多遍了!) 我正在使用dojo框架,我发现它在小部件生命周期的BuildRendering和post-create方法之间失败。小部件是使用图形结构创建的,因此它是递归的。有人知道是什么导致这两种小部件生命周期方法之间的故障吗 我在一些地方读到过,模板可能有问题,所以我在节点代码后面加入了它 以下是小部件的简化版本,您可以了解正在发生的事情:Javascript Dojo小部件-BuildRendering和PostCreate之间无提示失败,javascript,internet-explorer,recursion,dojo,widget,Javascript,Internet Explorer,Recursion,Dojo,Widget,我正在尝试为我的web应用程序中的地图开发一个目录样式的小部件。这些小部件在Chrome和FireFox中运行得很好,但在InternetExplorer8中却悄无声息地失败了(我在开发这个应用程序时已经读了很多遍了!) 我正在使用dojo框架,我发现它在小部件生命周期的BuildRendering和post-create方法之间失败。小部件是使用图形结构创建的,因此它是递归的。有人知道是什么导致这两种小部件生命周期方法之间的故障吗 我在一些地方读到过,模板可能有问题,所以我在节点代码后面加入了
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>
因此,我的节点遵循这种结构,但正如我所说,在InternetExplorer中,buildRendering和postCreate之间会自动失败。我已经在这上面花了不少时间了。我希望有人能帮我一把
请不要看太多的语法,我复制了代码中粘贴的部分,但为了清晰起见,我对其进行了大量修改
谢谢
Ggilmann您不必调用
this.inherited(参数)构造函数中的代码>。Dojo将自动链接构造函数
您还需要添加this.inherited(参数)代码>到后创建
你的模板没有
的结束标记。我不能说我的答案能解决你的问题,但我只是列出了我在查看你的代码时注意到的一些事情。我复制了你的代码,并在Firefox和IE8中运行了它,它似乎在这两个版本中都能完美工作。已尝试在IE7模式、怪癖模式、兼容性模式等下运行,所有工作正常。我猜是什么打破了这是一些不包括在上面的修改版本。我打赌模板中的某些东西正在破坏它,因为这是在构建渲染期间获取和包含的。我试图通过不包含_onClick()类方法或_blankGif属性来打破它,但这些在IE8中没有特别的破坏性。感谢您的帮助,我将在明天重试。我说重试是因为我已经尝试了你所有的建议。我在某个地方读到了结尾的img,它不是必需的,所以我试着带着或不带着。我最初尝试不使用的继承调用,并将它们添加为我最后尝试的内容。在postCreate中继承的,尽管可能是必需的,但不会被调用,因为它从未进入postCreate。有点悲观,但我明天会再试一次。不需要在HTML5中关闭img(假设HTML5,如果是XHTML,那么应该包括它)。而且,我从来没有使用过这个.inherited(参数)(如果可能的话),因为当使用“use strict”时它将不起作用。你的班级应该在没有这些的情况下工作(大多数时候,当然也有例外)。不需要构造函数中的lang.mixin(this,params),因为Dojo应该这样做。我会放弃构造函数方法(当然,除非为了让问题更容易理解而删除了更多代码)。