Tôi đang sử dụng SlickGrid với knockout.js dựa trên ví dụ http://jsfiddle.net/rniemeyer/A9NrP/Đang cập nhật SlickGrid với Knockoutjs qua dependentObservable
Tôi có populating lưới và nút add làm việc theo ví dụ. Vấn đề tôi gặp phải là khi tôi cập nhật các thuộc tính hàng của viewmodel của tôi thông qua một ko.dependentObservable phần 'update' của ko.bindingHandlers được kích hoạt nhưng lưới slick không nhận các thay đổi.
html định nghĩa các ràng buộc:
<div id="grid" data-bind="slickGrid: { data: rows, columns: columns }"></div>
SlickGrid mã (tương tự như ví dụ):
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();
}
}
mô hình của tôi:
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));
},
}
Mã làm cho ajax c tất cả, và cháy ko.bindingHandlers.slickGrid.update nhưng doesnt slickgrid dường như đón những thay đổi, các ajax không trả lại dữ liệu hợp lệ, và được kích hoạt khi người dùng nhấp vào một liên kết:
ko.dependentObservable(function() {
if (this.data.lastAlarmRequest) this.data.lastAlarmRequest.abort();
this.data.lastAlarmRequest = $.get("/audit/alarmsdata/high", null, this.rows);
}, i2owater.viewmodels.AlarmsForViewModel);
Tại sao addItem chức năng làm việc nhưng không phải là ko.bindingHandlers.slickGrid.update? Trong chức năng cập nhật, tôi có thể thấy dữ liệu chính xác mà lưới điện phải được liên kết. Có phải vì tất cả dữ liệu trong thuộc tính hàng bị ghi đè?
CẬP NHẬT: Tôi đã cố gắng sử dụng grid.invalidate(); nhưng nó không làm việc và cũng đã thấy rằng các chức năng addItem ngừng hoạt động một lần ko.dependentObservable được thực hiện
Bạn đã bao giờ giải quyết vấn đề này chưa? Tôi đang gặp vấn đề tương tự –
Xin chào Danny, tôi sợ tôi chưa sửa nó, tôi phải ngừng sử dụng các ràng buộc KO và sử dụng jquery với đối tượng dataView SlickGrids, tôi muốn quay trở lại vấn đề này và bắt đầu làm việc với KO. không thể nói khi nào tôi sẽ đi xung quanh. Xin vui lòng cho tôi biết nếu bạn nhận được bất kỳ xa hơn tôi đã làm. – Dave