dojo 小部件在被销毁时会发出事件还是您可以强制发出事件?
Do dojo widgets emit an event when destroyed or can you force one to?
我有一个基于 _WidgetBase 的自定义小部件。我在 JavaScript 中创建它并想知道它何时被销毁。
parent 中的代码:
var editRelatedTableWidget = new EditRelatedTable().placeAt(dom.byId("docEditorWidget");
editRelatedTableWidget.startup();
on(editRelatedTableWidget, "click", function () {console.log("DIJIT CLICKED"); }); // works
on(editRelatedTableWidget, "destroy", function () { console.log("DIJIT DESTROYED"); }); // does not ever happen
我尝试附加卸载、销毁和删除 - none 这些事件被触发。单击按钮时,小部件实际上会自行销毁,因此我尝试强制它发出一个事件,如下所示(在小部件中):
on.emit(this,"destroy");
this.destroyRecursive();
但是 parent 也没有检测到事件。有什么建议么?
我们可以使用widget的uninitialize函数。当小部件将被销毁时,将调用此函数。
例如:
editRelatedTableWidget.uninitialize = function(){ console.log('destroyed');}
我发现为了从 dojo 小部件发出自定义事件,小部件需要继承 Evented (dojo/Evented)。例如
declare ([_WidgetBase, Evented], {
_done: function () {
on.emit(this, "done");
}
调用代码现在可以侦听完成事件,例如
on(editRelatedTableWidget, "done", function () {console.log("it's done");})
dojo/aspect.after
对于这样的情况是一个很好的解决方案,当某个方法被调用时你想做一些事情,但是没有事件可以监听。
示例:
aspect.after(editRelatedTableWidget, 'destroy', function () {
console.log(this.id + ' destroyed');
}, true);
回调后的 true
参数是 receiveArguments
标志,它告诉 aspect.after
将原始参数按原样发送给回调,更重要的是,忽略它的 return 值,保留原始函数的 return 值。如果此标志为 false
,则向回调传递原始 return 值和参数数组,并且必须显式 return 函数现在应 return 的值。
我有一个基于 _WidgetBase 的自定义小部件。我在 JavaScript 中创建它并想知道它何时被销毁。
parent 中的代码:
var editRelatedTableWidget = new EditRelatedTable().placeAt(dom.byId("docEditorWidget");
editRelatedTableWidget.startup();
on(editRelatedTableWidget, "click", function () {console.log("DIJIT CLICKED"); }); // works
on(editRelatedTableWidget, "destroy", function () { console.log("DIJIT DESTROYED"); }); // does not ever happen
我尝试附加卸载、销毁和删除 - none 这些事件被触发。单击按钮时,小部件实际上会自行销毁,因此我尝试强制它发出一个事件,如下所示(在小部件中):
on.emit(this,"destroy");
this.destroyRecursive();
但是 parent 也没有检测到事件。有什么建议么?
我们可以使用widget的uninitialize函数。当小部件将被销毁时,将调用此函数。 例如:
editRelatedTableWidget.uninitialize = function(){ console.log('destroyed');}
我发现为了从 dojo 小部件发出自定义事件,小部件需要继承 Evented (dojo/Evented)。例如
declare ([_WidgetBase, Evented], {
_done: function () {
on.emit(this, "done");
}
调用代码现在可以侦听完成事件,例如
on(editRelatedTableWidget, "done", function () {console.log("it's done");})
dojo/aspect.after
对于这样的情况是一个很好的解决方案,当某个方法被调用时你想做一些事情,但是没有事件可以监听。
示例:
aspect.after(editRelatedTableWidget, 'destroy', function () {
console.log(this.id + ' destroyed');
}, true);
回调后的 true
参数是 receiveArguments
标志,它告诉 aspect.after
将原始参数按原样发送给回调,更重要的是,忽略它的 return 值,保留原始函数的 return 值。如果此标志为 false
,则向回调传递原始 return 值和参数数组,并且必须显式 return 函数现在应 return 的值。