7

ノックアウト剣道セットを使用した剣道UIグリッドがあります。

グリッドの 1 つの列にいくつかのカスタム ボタンがあります。つまり、別の div のエントリを編集するための ajax 呼び出しを行うか、削除するか、editId をチェックして関数を呼び出します。私の問題は、両方のイベントが 2 回発生したことです。dataBoundその上、私にとっては、イベントとイベントは同じように見えますdataBinding

フィドルはこちら

this.dataBound = function(){
    alert('dataBound');
};

this.dataBinding = function(){
    alert('dataBinding');
};

私はいくつかの異なるアプローチを試みました。

ここに別のフィドルがあります

this.gridConfig = {
    data: self.myData,
    datasource: {
        data: 'data'
    },
    dataBound: function(){
        alert('dataBound');
    },
    dataBinding: function(){
        alert('dataBinding');
    },
};

イベントは、グリッドがバインドされたとき、およびデータがバインドされたときに発生します。しかし、すべてのデータが存在するときにイベントのみを取得するにはどうすればよいでしょうか?

そこで何が起こっているか知っている人はいますか?ところで、マッピングプラグインを使用しています。

4

2 に答える 2

10

イベントはdataBoundさまざまな理由で発生しています。イベントが初めて発生するとconsole.log()、次のことがわかります。

  • e.sender._data空の配列です[]
  • e.element[0]div.k-grid.k-widget

イベントが 2 回目に発生すると、同じプロパティが次のように表示されます。

  • e.sender._data次のような項目を含む、長さ 3 の配列です。{ color: "green", name: "apple", uid: "..." }
  • e.element[0]div.k-grid.k-widget(同じ要素)

これは、グリッドが実際にデータをそれ自体に2回バインドしていることを意味しているようです。

推測するに、KOko.applyBindings(new ViewModel());はオブジェクトを初期化し、イベントをトリガーします。その後、剣道が要素データを内部的にバインドしようとすると、イベントが再び発生します。

これを回避するには、http: //docs.telerik.com/kendo-ui/api/javascript/ui/grid#events-dataBoundを参照してください。

次のようなものを採用できる場所:

var grid = $("#grid").data("kendoGrid");
grid.bind("dataBinding", grid_dataBinding);
grid.dataSource.fetch();

初期構成バインディングがに設定されている場合autoBind: false

最初のfalse dataBound イベントを誤ってキャッチしないようにします。

時間があれば、これを示す JSFiddle を使って戻ってきます。

解決策 1:このFiddleが役に立ちます。

解決策 2:

autoBind: falseグリッドが自動バインドされないように設定します。(@ジェイソン9187)

別のユーザーが言及したように、上記のテレリックのドキュメントに記載されている設定を変更することで、初期自動バインドをオフにすることができます。

基本的に、最初のアプローチでこの修正を行います。

<div id="grid" data-bind="kendoGrid: { data: myData, dataBinding: dataBinding, dataBound: dataBound }"></div>

なります:

<div id="grid" data-bind="kendoGrid: { data: myData, dataBinding: dataBinding, dataBound: dataBound, autoBind: false }"></div>

または、同じプロパティを 2 番目のアプローチに追加します。

フィドル: http://jsfiddle.net/hXn7e/45/

于 2015-09-24T15:27:59.090 に答える