slickgrid で Knockout を使用すると、行を追加して正しく機能させることができますが、個々のプロパティの編集を機能させることができません。次のエラーがスローされます。
Uncaught TypeError: Property 'ProductName' of object #<Product> is not a function
オブジェクトのプロパティでオブザーバブルを使用しているため、データのラップを解除して値を再設定した場合にのみ、表示する正しい値を取得できました。
var data = ko.utils.unwrapObservable(settings.data);
$.each(data, function(index, item) {
var prop;
for (prop in item) {
if (item.hasOwnProperty(prop)) {
data[index][prop] = ko.utils.unwrapObservable(data[index][prop]);
}
}
});
var columns = ko.utils.unwrapObservable(settings.columns);
var options = ko.utils.unwrapObservable(settings.options) || {};
grid = new Slick.Grid(element, data, columns, options);
そして、編集機能は私のビューモデルにあります:
function ViewModel(data) {
var self = this;
self.gridData = ko.observableArray(data);
self.columns = [
{
name: 'Product ID',
id: 'ProductId',
field: 'ProductId'},
{
name: 'Color',
id: 'ColorName',
field: 'ColorName'},
{
name: 'Sku',
id: 'Sku',
field: 'Sku'},
{
name: 'Product Name',
id: 'ProductName',
field: 'ProductName'}
];
self.fnTestClickEdit = function() {
self.gridData()[0].ProductName("Product has been Edited " + new Date());
};
}
しかし、私がこれで行き止まりになっているのを見て、ここでの実装で露骨に間違ったことをしていますか?
これをすべてまとめた jsFiddle を次に示します。