Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Dojo小部件-BuildRendering和PostCreate之间无提示失败_Javascript_Internet Explorer_Recursion_Dojo_Widget - Fatal编程技术网

Javascript Dojo小部件-BuildRendering和PostCreate之间无提示失败

Javascript Dojo小部件-BuildRendering和PostCreate之间无提示失败,javascript,internet-explorer,recursion,dojo,widget,Javascript,Internet Explorer,Recursion,Dojo,Widget,我正在尝试为我的web应用程序中的地图开发一个目录样式的小部件。这些小部件在Chrome和FireFox中运行得很好,但在InternetExplorer8中却悄无声息地失败了(我在开发这个应用程序时已经读了很多遍了!) 我正在使用dojo框架,我发现它在小部件生命周期的BuildRendering和post-create方法之间失败。小部件是使用图形结构创建的,因此它是递归的。有人知道是什么导致这两种小部件生命周期方法之间的故障吗 我在一些地方读到过,模板可能有问题,所以我在节点代码后面加入了

我正在尝试为我的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应该这样做。我会放弃构造函数方法(当然,除非为了让问题更容易理解而删除了更多代码)。