Używam SlickGrid z knockout.js na przykładzie http://jsfiddle.net/rniemeyer/A9NrP/Aktualizacja SlickGrid z Knockoutjs poprzez dependentObservable
mam zaludnianie siatki i przycisk ADD Praca jak na przykład. Problem, który mam jest, gdy aktualizuję właściwość wierszy mojego viewmodel poprzez ko.dependentObservable sekcja "update" ko.bindingHandlers jest uruchamiana, ale zręczna siatka nie pobiera zmian.
HTML określa wiązania:
<div id="grid" data-bind="slickGrid: { data: rows, columns: columns }"></div>
kod SlickGrid (taki sam jak w przykładzie)
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();
}
}
my Model
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));
},
}
Kod które sprawiają, że ajax c wszystkich, a pożary ko.bindingHandlers.slickGrid.update ale slickgrid robi wydaje się podnieść zmiany, Ajax ma powrotu prawidłowych danych i jest zwolniony, gdy użytkownik kliknie na 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);
Dlaczego addItem funkcja działa, ale nie ko.bindingHandlers.slickGrid.update? W funkcji aktualizacji mogę zobaczyć poprawne dane, do których sieć powinna być związana. Czy to dlatego, że wszystkie dane w właściwościach wierszy są nadpisywane?
AKTUALIZACJA: Próbowałem użyć grid.invalidate(); ale nie robi praca i widziałem też, że funkcja addItem przestaje działać po ko.dependentObservable jest wykonywany
Czy kiedykolwiek rozwiązałeś ten problem? Mam ten sam problem –
Witam Danny, obawiam się, że jeszcze tego nie naprawiłem, musiałem przestać używać wiązań KO i używać jquery z obiektem slickGrids dataView, chcę do tego wrócić i zacząć działać z KO. po prostu nie mogę powiedzieć, kiedy się do tego zabiorę. Daj mi znać, jeśli uzyskasz więcej niż ja. – Dave