嗯,這不是最好的情況說明...無論如何,我試圖更新我的視圖模型,但它不工作。默認情況下,我從控制器功能,並通過點擊按鈕獲取數據 - 從同位指示其他功能,但視圖模型只包含第一視圖模型初始化後接收到的數據。Knockout.js更新視圖模型上的按鈕點擊
<script>
function viewModel() {
var self = this;
self.currentPage = ko.observable();
self.pageSize = ko.observable(10);
self.currentPageIndex = ko.observable(0);
self.salesdata = ko.observableArray();
self.newdata = ko.observable();
self.currentPage = ko.computed(function() {
var pagesize = parseInt(self.pageSize(), 10),
startIndex = pagesize * self.currentPageIndex(),
endIndex = startIndex + pagesize;
return self.salesdata.slice(startIndex, endIndex);
});
self.nextPage = function() {
if (((self.currentPageIndex() + 1) * self.pageSize()) < self.salesdata().length) {
self.currentPageIndex(self.currentPageIndex() + 1);
}
else {
self.currentPageIndex(0);
}
}
self.previousPage = function() {
if (self.currentPageIndex() > 0) {
self.currentPageIndex(self.currentPageIndex() - 1);
}
else {
self.currentPageIndex((Math.ceil(self.salesdata().length/self.pageSize())) - 1);
}
}
//Here I'm trying to update ViewModel
self.request = function (uri) {
$.ajax({
url: uri,
contentType: 'application/json',
data: [],
type: 'GET',
cache: false,
success: function (data) {
ko.mapping.fromJS(data.$values, {}, self.salesdata);
}
});
}
}
$(document).ready(function() {
$.ajax({
url: "/api/sales",
type: "GET",
cache: false,
}).done(function (data) {
var vm = new viewModel();
vm.salesdata(data.$values);
ko.applyBindings(vm);
}).error(function (xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
});
//Here i'm calling for ViewModel update
$(".btn-default").click(function() {
days = $(this).val();
var uri = "/api/sales?days=" + days;
new viewModel().request(uri);
});
});
</script>
UPDATE。 我chaged的代碼塊中我得到新數據如下:
self.request = function (uri) {
$.getJSON(uri, function (data) {
ko.mapping.fromJS(data.$values, {}, viewModel);
});
}
不幸的是這是行不通的爲好。這裏沒有任何JS錯誤,控制器返回更新數據的適當部分。
您確定沒有JavaScript錯誤,並且您的請求調用成功處理程序嗎? – milagvoniduak
經過一番調查,我認爲這一行的問題 - ko.mapping.fromJS(data。$ values,{},viewModel);因爲當我嘗試通過alert(data。$ values)顯示數據時,它顯示的是Object而不是數據。是的,爲了避免再次調用viewmodel,我使用clickeevnt作爲@GoTo的建議。 –