2

グリッドで解決できない問題が発生しました。私のアプリケーションでは、をバッチ編集モードで使用して、データ入力担当者が画面上の複数のレコードをすばやく編集できるようにしています。この特定のグリッドは、ページングと並べ替えを許可するように設定されています。

特定のページ (データグリッド/データソースのページのように) で編集が行われているときに、並べ替えを試行したり、ページング リンクの 1 つをクリックしたりしたときに、ユーザーにプロンプ​​トを表示する方法を探しています。ユーザーが [OK] をクリックした場合は、データの次のページに進みたいと思います。それ以外の場合は、編集をキャンセルして、既存の編集で現在のページにユーザーを保持したいと考えています。私の他のオプションは、ページングまたはソート時に変更を自動的にコミットするか、キャンセルして現在のページにとどまるようにすることです。

これまでの私の試みは、実際のグリッド データソースで変更イベントを使用してダーティ フラグをオブザーバブルに格納し、グリッドの dataBinding イベントをリッスンして実際の並べ替えまたはページングの変更をキャッチし、プロンプトが表示されたときにプロンプ​​トを表示することでした。 isDirty フラグが true であり、dataBinding イベントの e.action == 「再バインド」。

このアプローチで私が抱えている問題は、グリッドの dataSource が別のページのフェッチを既に実行した後に dataBinding イベントが発生することです。これにより、編集を保存したり、既存の編集を維持したりすることができなくなります。

ページのフェッチ/ソートの前に検査を実行できる、サブスクライブできるイベントが見つかりません。他の誰かがこのシナリオを処理する方法を思いつきましたか? 人々がデータ入力アプリケーションで処理したいと思うのは、かなり一般的なことだと私には思えます。

4

1 に答える 1

0

dataSource の requestStart イベントをサブスクライブすることで問題を解決しました。これで、私の剣道データソースは次のようになります。

{
    pageSize: 15,
    batch: false,
    schema: {
        model: {
            id: "LocalId",
            fields: {
                LocalId:
                {
                    editable: false,
                    nullable: true
                },
                Ssn: {
                    validation: {
                       required: true
                    }
                },
                QtrEarnings: {
                    type: "number",
                    defaultValue: 0,
                    validation: { required: true, min: 0 }
                }
            }
        }
    },
    change: function (e) {
        onDataChange(e);
    },
    requestStart: function (e) {
        if (homeModel.get("dataSource").hasChanges()) {
            if (confirm("You have made edits to data! Click Cancel to stay on this page or click Ok to abandon your changes and continue.") == false) {

                e.preventDefault();
            }
        }
    }
}
于 2016-02-10T10:29:29.380 に答える