1

状況: グリッドを拡張し、タブまたは矢印をリッスンする onkeydown イベントを追加しました。これにより、ユーザーは次の「編集可能な」セルに移動できるようになります。私はこれを使用して...

var grid = $("#" + that.gridId).data('kendoMyExtension');
grid.closeCell(currentCell); 
grid.editCell(desiredCell);

現在の動作: 期待どおりに動作しますが、セルが閉じると、データがバインドされている ViewModel.Field に (正しいバインディングを通じて) 保持されません。...ただし、変更を加えた後に Enter キーを押した IFF では、変更が保持されます。

私が試したこと: フォーカスを変更する前に手動で更新を行います(そして、他のすべての剣道編集グッズを発射します)

{grid Context}
that.saveRow();
that.dataSource.sync();

ただし、これらは機能しません。通常、剣道の腸のどこかで未定義のエラーをスローすることになります。

私が欲しいもの:

理想的には、剣道は少なくとも 1 つの MVVM と剣道拡張機能の例 (グリッド用) を提供し、すべての機能、イベントなどがバインドされています..しかし..おそらくここで質問することはないので、解決します:

  1. 剣道は変更をどこに「保存」しますか?
  2. {dataSource ではなく MVVM バインディングの場合}、実際に更新を呼び出すために使用されるメソッド。
  3. {one-way, two-way} の精神で拘束力のあるキーワードを見逃していませんか?
  4. 剣道はノックアウトに基づいていますか.. ノックアウトのテクニックを使用して、剣道で抱えている問題を回避できますか?

このグリッドの表示ロジックには、他にも多くの変更があります。テンプレートを使用して、セルを編集可能にするかどうかを決定し、テンプレートを使用して、非編集モードと編集モードでレンダリングする必要があるものを決定し、いくつかの IOC ロジックを使用してエクステンションに配線します...(参考までに)

4

1 に答える 1

1

剣道を通り抜けた後、問題が見つかりました...私のデータソースにはリーダーがありませんでした(そして、それはうまくいくべきではありません)ので、同期とsaveRowは確実に機能しません。


編集テンプレートで行が「k-edit-row」としてマークされていることを確認する必要があります。

{your edit template selector}.closest('tr').addClass("k-grid-edit-row");

saveRow を機能させたい場合、ただし私の場合は信頼性がありませんでした(コードをステップ実行した場合にのみ機能し、そうでない場合は毎回失敗します...なぜ人気のあるものを試したのかわかりません'setTimeout(...)' ....) 最終的にこれが私がやったことです:

myOnKeyDown:function(e){
    var cell = $(e.target).closest("td")[0];
    var row = $(e.target).closest("tr")[0];
    if (cell != undefined) {
        that.forceSync(cell, row, e.target.value);
    }
},


forceSync: function (cell, row, value){
    /// this is in the extension scope /////
    ///  Note that this uses functions in the dataSource Scope! ///
    var cellFieldName = cell.kendoBindingTarget.target.options.fields.field;
    var cellRecordUid = row.getAttribute('data-uid');
    var that = $("#" + this.gridId).data('kendoMyExtension').dataSource, idx, length;
    var data = that._flatData(that._data);
        for (idx = 0, length = data.length; idx < length; idx++) {
            if(data[idx].uid ===cellRecordUid){
                data[idx][cellFieldName] = value;
            }
        }
    },

...これにかなりの時間を費やした後、他の誰かが恩恵を受けるはずだと感じました...

それが他の誰かに役立つことを本当に願っています..-乾杯。

于 2013-06-19T22:57:57.403 に答える