sto usando SlickGrid con knockout.js sull'esempio http://jsfiddle.net/rniemeyer/A9NrP/Aggiornamento SlickGrid con Knockoutjs via dependentObservable
ho il popolamento della griglia e il pulsante ADD di lavoro come per l'esempio. Il problema che sto avendo è quando aggiorno la proprietà delle righe del mio viewmodel via ko.dependentObservable la sezione 'update' di ko.bindingHandlers viene attivata ma la griglia slick non rileva le modifiche.
html che definisce il legame:
<div id="grid" data-bind="slickGrid: { data: rows, columns: columns }"></div>
codice SlickGrid (stesso come esempio):
var grid;
ko.bindingHandlers.slickGrid = {
init: function (element, valueAccessor) {
var settings = valueAccessor();
var data = ko.utils.unwrapObservable(settings.data);
var columns = ko.utils.unwrapObservable(settings.columns);
var options = ko.utils.unwrapObservable(settings.options) || {};
grid = new Slick.Grid(element, data, columns, options);
},
update: function (element, valueAccessor, allBindingAccessor, viewModel) {
var settings = valueAccessor();
// I can see the correct data here but the grid does not update
var data = ko.utils.unwrapObservable(settings.data);
grid.render();
}
}
mio modello:
myViewModel = {
data : ko.observableArray(),
tabs: ['High', 'Medium', 'Low'],
rows : ko.observableArray([]),
columns : [
{
id: "id",
name: "ID",
field: "id"
},
{
id: "Location",
name: "Location",
field: "Location"
},
{
id: "Comment",
name: "Comment",
field: "Comment"
}
],
addItem: function() { // this works and SlickGrid adds a new row
this.rows.push(new ModelRow(0, "New", 5.00));
},
}
Il codice che rendono l'ajax c tutti, e gli incendi ko.bindingHandlers.slickGrid.update ma pretende molto slickgrid sembrano rendere effettive le modifiche, l'Ajax fa restituire i dati validi, e viene attivato quando l'utente fa clic su un link:
ko.dependentObservable(function() {
if (this.data.lastAlarmRequest) this.data.lastAlarmRequest.abort();
this.data.lastAlarmRequest = $.get("/audit/alarmsdata/high", null, this.rows);
}, i2owater.viewmodels.AlarmsForViewModel);
Perché l'addItem la funzione funziona ma non il ko.bindingHandlers.slickGrid.update? Nella funzione di aggiornamento posso vedere i dati corretti a cui la griglia deve essere associata. È perché tutti i dati nelle proprietà delle righe vengono sovrascritti?
UPDATE: Ho provato a utilizzare grid.invalidate(); ma pretende molto lavoro e hanno anche visto che la funzione addItem smette di funzionare una volta ko.dependentObservable viene eseguito
Hai mai risolto questo problema? Sto avendo lo stesso problema –
Ciao Danny, temo di non averlo ancora risolto, ho dovuto smettere di usare i binding KO e usare jquery con l'oggetto dataView di SlickGrids, voglio tornare a questo e lavorare con KO. Non posso dire quando ci penserò. Per favore fatemi sapere se vi capita di andare oltre. – Dave