Tôi có lưới và điều khiển chọn trên trang. Chọn bất kỳ giá trị lựa chọn nào kích hoạt cập nhật lưới. Việc cập nhật đó được thực hiện bằng tính toán. Tôi có thể kích hoạt lưới theo cách thủ công để cập nhật, ví dụ: trong trường hợp giá trị mới được thêm vào lưới không?Knockout.js: kích hoạt theo cách thủ công được tính
function vm(){
var self = this;
self.items = ko.observableArray([]);
self.chosen_category = ko.observable("");
self.pager = {
page_namber : ko.observable(1),
page_size : ko.observable(10)
};
self.sort = {
field : ko.observable('name'),
dist : ko.observable('asc')
};
// etc.
self.fetch = ko.computed(function(){
$.ajax({
url: '/api/items/',
type: 'GET',
data: ko.toJSON(self),
contentType: 'application/json',
success: self.items
});
}, self);
self.add_item = function() {
//here I want to update the grid
self.fetch(); // not work
};
}
Chắc chắn tôi có thể chuyển sang chức năng riêng nhưng tôi đang tìm giải pháp sạch hơn. Cảm ơn!
phiên bản làm việc:
function vm() {
var self = this;
self.items = ko.observableArray([]);
self.chosen_category = ko.observable("test");
self.pager = {
page: ko.observable(1),
size: ko.observable(10)
};
self.sort = {
field: ko.observable('name'),
dist: ko.observable('asc')
};
self.fetch = function() {
var data = {
category: self.chosen_category(),
pager: ko.toJS(self.pager),
sort: ko.toJS(self.sort)
};
$.ajax({
url: '/api/items/',
type: 'POST',
data: ko.toJSON(data),
contentType: 'application/json',
success: self.items
});
};
self._auto_update = ko.computed(self.fetch).extend({ throttle: 1 }); ;
self.add_item = function() {
self.fetch();
};
}
Bạn không cần phải cập nhật nó bằng tay từ các mặt hàng là một observableArray. Nhưng tôi không chắc chắn tôi thích cách bạn đang sử dụng các quan sát tính toán – Anders
Tôi nghĩ ý tưởng của KnockOut là bạn làm cho mọi thứ có thể quan sát được, chứ không phải tự kích hoạt nó. Phương thức tìm nạp sẽ tự động được gọi bằng cách thay đổi bộ sưu tập. Tôi đang tìm kiếm như thế nào, bạn có một ví dụ hoàn chỉnh hơn? – EricG