2013-11-15 57 views
0

技術方面:事件監聽器不會在IE中調用 - 這裏有什麼問題?

  • 道場1.8.1
  • dgrid 0.3.4預
  • IE 10.0.9200

短版:

我有我也在聽某些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將會調用,但不會調用回調on("status_changed")。其他時間,發射將被調用,回調也會被調用(預期)。

    • 這與分頁或電網刷新莫名其妙的事,但我沒能隔離重現該問題
    • 在更深的挖掘到這個完全相同的步驟,我見過IE到達點在那裏執行以下操作:(道場/上,線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()呼叫的掛機永遠不會被稱爲

    • 我驗證了DOM元素正被觸發的事件,並聽取到實際上是相同的,每次

我的問題是:我怎麼能找到潛在的問題,並確保我的( )每次都會調用回調函數?

回答

0

您正遇到在dgrid 0.3.7中修復的https://github.com/SitePen/dgrid/issues/379。要解決與分頁擴展中的分頁控件有關的問題,您需要更新您的dgrid版本或自己應用更改集。

這是由於相當荒謬和惱人的IE存在於IE9和IE10的錯誤(固定在IE11):

+0

這似乎可能的情況。我會將更改集應用到網格中(因爲我的項目的大小不允許我輕鬆升級),並且由於此問題似乎是由非導航錨點觸發的事件發生的,因此我的問題應該消失。我會回來一些結果! – Alpha

+0

花了我一段時間,但直接應用修復作爲一個mixin做的伎倆。非常感謝! – Alpha