Knockout.js mise à Jour ViewModel sur le bouton cliquez sur

Bien, ce n'est pas la meilleure situation description... de toute façon, je suis en train de mettre à jour mon ViewModel mais cela ne fonctionne pas. Par défaut je suis l'obtention de données de fonction de contrôleur et par clic sur un bouton de la part d'une autre fonction dans la même contolleur, mais ViewModel ne contiennent que des données reçues après la première ViewModel d'initialisation.

<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>

Mise à JOUR.
Je chaged bloc de code dans lequel je suis à l'obtention de nouvelles données comme suit:

self.request = function (uri) {
$.getJSON(uri, function (data) {
ko.mapping.fromJS(data.$values, {}, viewModel);
});
}

Malheureusement cela ne fonctionne pas ainsi. Ici, pas toutes les erreurs JS, contrôleur de retour bonne partie de la mise à jour des données.

êtes-vous sûr qu'il n'y a pas d'erreur JavaScript et votre demande appelle gestionnaire de succès?
Après quelques recherches, je suppose que le problème dans cette ligne - ko.la cartographie.fromJS(les données.$valeurs, {}, viewModel); parce que quand j'essaie d'afficher les données via alert (data.$de valeurs), c'est montrer un Objet de données. Et oui, pour éviter d'appeler un viewmodel de nouveau, j'ai utilisé clickeevnt @GoTo suggèrent.

OriginalL'auteur andrey.shedko | 2014-04-25