クリックすると、データ行の値の一部を配列にプッシュするボタンがあります。選択/非選択の状態に基づいてテキストを入れ替えます。これはうまく機能しますが、ユーザーがデータグリッドをページングしたりフィルター処理したりすると、選択された値は残りますが、ボタンのテキストは「追加」状態に戻ります。ボタンのコードは次のとおりです。
command: [
{
name: "Select", template: "<a href='\\\#' class='k-button k-button-icontext btn-destroy k-grid-Select'>#= this.Selected === true ? 'Remove' : 'Add' #</a>",
click: function (e) {
var curBtn = $(e.target);
var tr = $(e.target).closest("tr"); // get the current table row (tr)
var data = this.dataItem(tr);
console.log(data);
var selected = data.Selected;
if (selected == false || selected == undefined) {
data.Selected = true;
curBtn.html('remove');
}
else {
data.Selected = false;
curBtn.html('add');
}
console.log(curBtn);
data.refresh();
}
}],
テンプレートに対してこれを試しましたが、無効なテンプレート エラーが発生し続けました。この原因は、データ セルの外部にある項目に直接アクセスできないことが原因だと思いますか?
template: "<a href='\\\#' class='k-button k-button-icontext btn-destroy k-grid-Select'>#= Selected == true ? Remove : Add #</a>"
いつものようにどんな助けでも大歓迎です!! ありがとう、ハッピーコーディング!
編集:
ここにフィドルがあります: http://jsfiddle.net/rKBZq/27/
これは、私がやろうとしていることのかなりの代表です。このデモと同じように、データはローカルです。したがって、基本的には、行の選択されたプロパティに基づいて、ボタンのテキストを「追加」または「削除」に変更し、クリックアクションで行とデータを適切に更新したいと考えています...
私が観察したことは、console.log(data) 選択した値が実際に更新されたときです...ただし、グリッドセルは現在です。とにかく私は通常それを非表示にしているので、それは問題ありません...テンプレートにスラッグした this.Selected が、バッキングデータではなくテーブル行からプルされている可能性はありますか? -- 編集: this.refresh() を追加すると、テーブルも更新されますが、そうするとボタンが再レンダリングされません...コマンドボタンも更新して反映させ、ページングまたはフィルタリング中に保存します...だからこれデータが更新されたときに更新を呼び出すと、ボタンが更新/再レンダリングされないのはなぜですか?
もう1つの観察は、これが機能する場合、curBtn.html('Add')を実行する必要がないことは明らかです...データの変更に応じてボタンの状態を交換したいと考えています...