这是我第一次使用Knockout Mapping插件直接从服务器的JSON创建我的viewmodel。初始数据集来自服务器,然后我轮询10秒内的更改。这段代码有效,但我觉得它不是很干。
我看了一遍以寻找更好的例子但是没有运气。如何避免在两个不同的地方调用getJSON?
在我的customer-scripts.js文件中:
function CustomerRefresher(id) {
var viewModel;
$.getJSON('/ApiCustomer/Get/' + id, function (data) {
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
setTimeout(refresh, 10000);
});
var refresh = function () {
$.getJSON('/ApiCustomer/Get/' + id, function (data) {
ko.mapping.fromJS(data, {}, viewModel);
});
setTimeout(refresh, 10000);
}
}
在我的.cshtml文件中:
$(function () {
CustomerRefresher(@Model.Id);
});
答案 0 :(得分:1)
function CustomerRefresher(id){
var refresh = function(){
$.getJSON('/ApiCustomer/Get/' + encodeURIComponent(id), function(data){
if (typeof CustomerRefresher.viewModel !== 'undefined'){
ko.mapping.fromJS(data, {}, CustomerRefresher.viewModel);
}else{
CustomerRefresher.viewModel = ko.mapping.fromJS(data);
ko.applyBindings(CustomerRefresher.viewModel);
}
setTimeout(refresh, 10000);
});
};
refresh();
}
那样的东西? (可以将函数本身用于"缓存"视图模型)另外,example提供。
另外,FWIW,这可能更适合codereview.SE。