0

技術的背景:

  • 道場 1.8.1
  • dgrid 0.3.4-pre
  • IE 10.0.9200

短縮版:

私も (_WidgetBase から) リッスンしている dojo/on イベントがいくつかありますが、呼び出される場合と呼び出されない場合があります。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()オンフックの呼び出しが呼び出されていないことを確認しました

    • イベントがトリガーされ、リッスンされているDOM要素が実際には同じであることを毎回確認しました

私の質問は、根本的な問題を見つけて、 on() コールバックが毎回呼び出されるようにするにはどうすればよいですか?

4

1 に答える 1

0

dgrid 0.3.7 で修正されたhttps://github.com/SitePen/dgrid/issues/379に遭遇しています。ページネーション拡張機能のページング コントロールに関連する問題を解決するには、dgrid のバージョンを更新するか、変更セットを自分で適用する必要があります。

これは、IE9 と IE10 (IE11 で修正済み) に存在するかなりばかげた迷惑な IE バグによるものです。

于 2013-11-15T05:11:34.407 に答える