技术背景
简短版:
我有一些dojo / on我正在听的事件(来自_WidgetBase),但它们有时会被调用,有时却不会被调用。 dgrid,分页和IE都在混合中。可能是什么问题?
详细信息:
我有一个dgrid网格这种奇怪的情况,尽管我已经尝试过,但我还是无法找出问题的实际原因。我将尽可能彻底,但随时可以要求更多信息。
我有一个使用分页的dgrid组件和一个组合框,它有一些我将过滤的值。这几乎是如何设置的(简化,实际代码引用其他模块,并且有更多模块化的东西):
// GridContainerWidget
var CustomGrid = declare([Grid, CompoundColumns, Selection, Keyboard, Pagination], {
selectionMode: "single",
rowsPerPage: 20
});
var grid = new CustomGrid({
deselectOnRefresh: false
}, domContainer);
网格后来被绑定到JsonStore。
我的过滤器按以下方式设置:
// SearchBarWidget
// inside a custom widget, inheriting from _WidgetBase
var self = this;
var statusCombo = new ComboBox({
store: new Memory(/* data and labels */),
onChange: function (selection) {
self.emit("status_changed", self.getSomeData());
}
}, comboDomContainer);
回到封装过滤器和网格的小部件:
// GenericListWidget, contains both the SearchBarWidget and the GridContainerWidget
var self = this;
this._searchToolbar.on("status_changed", function (data) {
// ... some "calibrations" ...
self._grid.set("query", { newCriteria: "something" });
});
这是奇怪的地方:
有时会在IE emit("status_changed")
中调用,但不会调用回调on("status_changed")
。其他一些时候,将调用emit并且也会调用回调(预期)。
在深入研究这个问题时,我已经看到IE达到了执行以下任务的程度:( dojo / on,第314到322行)
var nativeEvent = target.ownerDocument.createEvent("HTMLEvents");
nativeEvent.initEvent(type /* "status_changed" */, !!event.bubbles /* true */, !!event.cancelable /* true */);
// ... copies properties ...
return target.dispatchEvent(nativeEvent) && nativeEvent; // returns true
我确认永远不会调用挂起的remove()
调用
我的问题是:我怎样才能找到潜在的问题,并确保每次调用我的on()回调?
答案 0 :(得分:0)
您遇到了https://github.com/SitePen/dgrid/issues/379,它已在dgrid 0.3.7中修复。要解决与分页扩展中的分页控件相关的问题,您需要更新您的dgrid版本或自行应用更改集。
这是由于IE9和IE10中存在一个相当荒谬且烦人的IE漏洞(在IE11中修复):