Dojo Widget - BuildRendering和PostCreate之间无声失败

时间:2013-03-05 22:31:09

标签: javascript internet-explorer recursion dojo widget

我正在尝试为我的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

1 个答案:

答案 0 :(得分:1)

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

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

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

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