我正在尝试为我的Web应用程序中的地图开发一个内容样式窗口小部件表。这些小部件在Chrome和FireFox中运行良好,但在Internet Explorer 8中无声地失败(我在开发此应用程序时已经阅读了很多次!)
我正在使用dojo框架,我发现它在widget生命周期的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 :(得分:1)
您不必在构造函数中调用this.inherited(arguments);
。 Dojo将自动链接构造函数。
http://dojotoolkit.org/reference-guide/1.8/dojo/_base/declare.html#id8
您还需要将this.inherited(arguments);
添加到postCreate
。
您的模板没有<img>
的结束标记。