chúng tôi quyết định đi với KoGrid, sau một số nghiên cứu, chúng tôi có thể làm tất cả những gì chúng tôi cần. Cảm ơn tất cả các bạn đã giúp đỡ. Bạn có thể tìm thấy mã thử nghiệm của chúng tôi bên dưới. Chúc một ngày tốt lành.
<!--3rd party library scripts -->
<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/json2.js"></script>
<script src="~/Scripts/es5-sham.min.js"></script>
<script src="~/Scripts/es5-shim.min.js"></script>
<script src="~/Scripts/knockout-2.1.0.js"></script>
<script src="~/Scripts/q.js"></script>
<script src="~/Scripts/jquery.json-2.3.js"></script>
<script src="~/Scripts/KoGrid.debug.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var GridViewModel = function() {
var self = this;
self.products = ko.observableArray();
self.currentPage = ko.observable(1);
self.pageSize = ko.observable(10);
self.totalServerItems = ko.observable(80);
self.selectedItem = ko.observable();
self.sortInfo = ko.observable();
self.filterInfo = ko.observable();
self.updateItem = function() { };
var entityModel = window.breeze.entityModel;
var entityManager = new entityModel.EntityManager('api/Service');
var metadataStore = entityManager.metadataStore;
metadataStore.importMetadata($.toJSON(metadata));
var op = window.breeze.FilterQueryOp;
this.getPagedDataAsync = function (pageSize, page, filterInfo, sortInfo) {
var columnName = "ProductID";
if (sortInfo != null)
columnName = sortInfo.column.field + " " + sortInfo.direction;
var query = entityModel.EntityQuery.from("Products").orderBy(columnName).skip((page - 1) * pageSize).take(pageSize);
for (var propertyName in filterInfo) {
query = query.where(propertyName, op.StartsWith, filterInfo[propertyName]);
}
entityManager.executeQuery(query).then(function (data) {
self.products.removeAll();
var items = data.results;
items.forEach(function (item) {
self.products.push(item);
});
});
};
this.dataChangedTrigger = ko.computed(function() {
var page = self.currentPage(),
pageSize = self.pageSize(),
filterInfo = self.filterInfo(),
sortInfo = self.sortInfo();
if (page && pageSize) {
self.getPagedDataAsync(pageSize, page, filterInfo, sortInfo);
}
return null;
});
}
var model = new GridViewModel();
ko.applyBindings(model);
model.getPagedDataAsync(10, 1, model.filterInfo(), model.sortInfo());
});
</script>
<div id="sandBox" class="example" style="height: 600px; width:600px; max-width: 700px;"
data-bind="koGrid: { data: products,
columnDefs: [{ field: 'ProductName', width: 200 },
{ field: 'QuantityPerUnit', width: 200 },
{ field: 'UnitPrice', width: 150 }],
autogenerateColumns: false,
isMultiSelect: false,
enablePaging: true,
useExternalFiltering: true,
useExternalSorting: true,
filterInfo: filterInfo,
sortInfo: sortInfo,
pageSize: pageSize,
pageSizes: [10, 20, 50],
currentPage: currentPage,
totalServerItems: totalServerItems,
selectedItem: selectedItem }">
</div>
<!-- Application scripts -->
<script src="~/Scripts/breeze.js"></script>
<script src="~/Scripts/app/metadata.js"></script>
Nguồn
2012-12-03 14:58:29
Phiên bản 2.0 của koGrid hiện có nhiều tính năng hơn và tất cả các ràng buộc có thể được thực hiện trực tiếp trong javascript. Tôi thậm chí đã tạo một trình xử lý ràng buộc tự động chuyển đổi một mẫu ô chỉ đọc hiện có thành một mẫu có thể chỉnh sửa tại đây: https://github.com/ZiadJ/kgEditable/blob/master/kgEditable.js – Ziad
Nhưng phiên bản 2.0 không có bộ lọc mỗi cột và chúng tôi thực sự cần chúng. Ngoài ra chúng tôi cần nhóm :) Chúng tôi là một chút nhầm lẫn ở đây, chúng tôi sẽ quyết định xem các bộ lọc nhóm hoặc cột là quan trọng hơn hoặc chúng tôi sẽ phải tìm kiếm một lưới khác. –
Tôi không thực sự quan tâm bởi vì với knockout nó dễ dàng để thực hiện của riêng tôi cho mỗi cột lọc bằng cách sử dụng đầu vào riêng biệt nhưng yeah nó sẽ được tốt đẹp để có nó ra khỏi hộp như trước. Vì vậy, tôi đề nghị bạn thực hiện một yêu cầu cho nó trên trang vấn đề nếu nó chưa có. Tuy nhiên, hãy kiểm tra điều này: http://ericmbarnard.github.com/KoGrid/#/examples#grouping Nhóm đang ở đây để ở phiên bản 2.0! – Ziad