0

我正在尝试为我的 web 应用程序中的地图开发一个目录样式小部件。这些小部件在 Chrome 和 FireFox 中运行良好,但在 Internet Explorer 8 中却无声无息地失败了(我在开发这个应用程序时已经读过很多次了!)

我正在使用 dojo 框架,我发现它在小部件生命周期的 BuildRendering 和 PostCreate 方法之间失败了。小部件是使用图形结构创建的,因此它是递归的。有谁知道在小部件生命周期的这两种方法之间会导致失败的原因是什么?

我在某些地方读到该模板可能有问题,所以我将它包含在我的 Node 代码之后。

这是小部件的简化版本,因此您可以了解正在发生的事情:

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 之间默默地失败了。我已经在这上面花了很多时间。我希望有人可以在这里帮我一把。

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

谢谢,

吉尔曼

4

1 回答 1

1

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

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

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

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

于 2013-03-06T00:39:54.027 回答