gpt4 book ai didi

javascript - 道场 1.9 : placeAt automatically calls startup when parent widget has started up

转载 作者:搜寻专家 更新时间:2023-10-31 22:45:55 25 4
gpt4 key购买 nike

Dojo v1.9

我正在编写一些代码,以编程方式创建一个我需要放置到布局小部件中的小部件。我目前遇到的问题是 startup 被 dojo 主动调用。

如果布局小部件已经启动,则在使用placeAt(domNode) 时调用startup。这是不可取的,最好必须显式调用 startup

我这样说是因为在当前情况下,startup 被调用了两次,一次是在调用 placeAt 时,一次是在调用 startup 时之后由我手动调用。

Dojo docsrelated tutorials说当以编程方式创建小部件时,您应该始终手动调用 startup 以确保发生正确的解析。但是 startup 的自动调用导致了一些问题,启动时出现重复操作,我可以将它们移到 postCreate 中,但这只是隐藏了问题。

这是小部件创建/启动的简单示例...

var myWidget = new Widget();
myWidget.placeAt('mainContent');
myWidget.startup();

mainContent 是 ContentPane 中的一个 div,这里是布局 html...

<body class="claro">
<div id="appLayout" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design: 'headline'">
<div data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'center'">
<div id="mainContent"></div>
</div>
<div class="edgePanel" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'top'">Some text here</div>
<div id="leftCol" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'left'"></div>
</div>
</body>

代码有效,这确实是我试图解决的 startup 被调用两次的问题。


更新:解决方法

建议在 startup 函数内针对小部件私有(private)变量 _started 进行检查,至少可以保护我免受重复,这是我的检查示例。

startup: function(){
if (typeof this._started === "undefined"){
// call inherited and pass on arguments
this.inherited(arguments);

// then do what ever you need here
}
}

注意我必须使用 typeof 而不是 boolean 检查,即使在 startup 之后 _startedtrue。这是因为我发现该变量在 startup 至少运行一次之前实际上并未声明,这是需要注意的事情。

无论如何,这为我提供了一个解决方法,但没有解决 startup 被 dojo 多次调用的问题。

最佳答案

startup() 在 Dojo 中经常被自动调用。例如,每当您在容器小部件上调用 addChild() 时,都会调用子项的 startup() 方法。查看_WidgetBase 的源代码,placeAt 也是其中一个实例。

当您使用类似dom-construct 的东西将dojo 小部件直接放置在DOM 节点上时,您应该手动调用startup()

如果你想检查一个小部件是否已经启动,你可以检查小部件内的 _started 属性。这是在 startup() 方法中设置的。

关于javascript - 道场 1.9 : placeAt automatically calls startup when parent widget has started up,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com