2012-12-15 17 views
5

Sự kiện dataSource.changed có hoạt động không?Dữ liệu giao diện người dùng KendoSự kiện đã thay đổi nguồn: nó có hoạt động không?

Sau lưới Kendo UI của tôi được khởi tạo, tôi đang liên kết các sự kiện thay đổi mỗi tài liệu ở đây:

http://docs.kendoui.com/api/framework/datasource#change

//To set after initialization 
dataSource.bind("change", function(e) { 
    // handle event 
}); 

tôi đang làm điều này:

// initialize 
$("#grid").kendoGrid({ 
     dataSource: dataSource, 

     blah blah blah 
) 

}); 
// end of initialization 



// bind afterwards 
var grid = $('#grid').data('kendoGrid'); 
    grid.dataSource.bind("change", function (e) { 
     dataChanged(); 
    }); 


//also tried a setTimeout: 

    // bind afterwards 
    setTimeout(function() { 
    var grid = $('#grid').data('kendoGrid'); 
    grid.dataSource.bind("change", function (e) { 
     dataChanged(); 
    }); 
}, 350); 



function dataChanged() { 
    // handle "change" whatever that means -- documentation definition is hazy 
    // does reassigning the data array constitute a change? 
    // does changing the value of a particular item in the data array 
    // constitute a change? 
    // does removing an item from the data array constitute a change? 

    var grid = $("#grid").data("kendoGrid"); 
    grid.refresh(); 
} 

Nhưng dataChanged của tôi() chức năng không được gọi khi tôi thực hiện một trong những điều sau:

var grid = $('#grid').data('kendoGrid'); 
grid.dataSource.data()[1]["deptname"] = 'XXX'; 

hoặc

grid.dataSource.data = aDifferentArray; 

Tôi không chắc chắn chính xác những gì sự kiện 'thay đổi' đang lắng nghe cho. Cái gì, chính xác, là vụ phải kích hoạt nó?

Nếu tôi tạo một nguồn dữ liệu hoàn toàn mới và gán nó vào lưới đã có nguồn dữ liệu, tôi không thấy cách kích hoạt sự kiện đã thay đổi của nguồn dữ liệu hiện tại. Sự kiện như vậy (lưới nhận thấy rằng dataSource của nó đã được thay thế bằng một nguồn dữ liệu khác) sẽ là một sự kiện cấp độ lưới, không phải là một sự kiện cấp dữ liệu, phải không?

Trả lời

8

Điều quan trọng cần lưu ý là việc sao lưu dữ liệu DataSourceObservableArray và các mục dữ liệu trong mảng đó được chuyển đổi thành ObservableObject s.

Sự kiện change của nguồn dữ liệu là bắn dưới 2 điều kiện:

  1. Dữ liệu ObservableArray thay đổi (một kỷ lục được chèn, xóa). Một ví dụ về điều này sẽ sử dụng các hàm DataSource.add() hoặc DataSource.remove().

  2. Nếu thuộc tính đã thay đổi sự kiện, hãy chuyển đến DataSource từ một trong các đối tượng ObservableData trong mảng. Tuy nhiên, giống như phần còn lại của khung MVVM Kendo, thông báo rằng một thuộc tính đã thay đổi chỉ xảy ra khi hàm .set("propertyName", value) của nó được gọi.

Đây là lý do tại sao grid.dataSource.data()[1]["deptname"] = 'XXX'; không kích hoạt sự kiện thay đổi. Nếu bạn thay đổi nó thành: grid.dataSource.data()[1].set("deptname", 'XXX'); thì nó sẽ bắt đầu hoạt động. Về cơ bản, hãy nghĩ về sự kiện change khi được kích hoạt để phản hồi thay đổi thuộc tính MVVM được kích hoạt từ đối tượng quan sát data.

Đối với việc thay đổi mảng dữ liệu grid.dataSource.data = aDifferentArray; Tôi thực sự không chắc chắn liệu điều đó sẽ hoặc sẽ kích hoạt thay đổi. Tôi chưa bao giờ thử điều đó.

+0

cảm ơn bạn đã làm rõ. Phương thức '.set' không kích hoạt sự kiện thay đổi trong khi' grid.dataSource.data = aDifferentArray' không, theo như tôi có thể nói. Tôi hy vọng có trong Kendo lưới tương đương với sự kiện DataSource_Changed trong WinForms lưới - bắn khi lưới được gán một nguồn dữ liệu khác nhau, bởi vì tôi hy vọng sẽ làm mới lưới với dữ liệu mới mỗi 60 giây: http://stackoverflow.com/ câu hỏi/13892021/kendo-ui-lưới-làm mới-lưới-dữ liệu-mỗi-60-giây-với-new-dữ liệu-datasource-a/13892541 # comment19140263_13892541 – Tim

+2

Thực ra, để trao đổi dữ liệu, tôi nghĩ bạn sử dụng ' Hàm .data() ': http: //docs.kendoui.com/api/framework/datasource # data để mã của bạn sẽ là 'grid.dataSource.data (aDifferentArray);' – CodingWithSpike

+0

tuyệt vời! Cảm ơn rất nhiều. – Tim

Các vấn đề liên quan