同じモデルを新しいデータで再バインドしたい、または ajax を呼び出した後に、まったく新しいデータでモデルを更新したいと言うことができます。
function returnData(url,data,type){
$.post(url, data, function(returnedData) {
if(type == "search")
{
ko.applyBindings(new SearchViewModel(returnedData,"#searchbox",url,data),$("#searchbox")[0]);
}
});
}
これは、データに対してajaxを呼び出すコードであり、新しいデータが受信されると、それをモデルにバインドします。初回は問題ありませんが、次回は同じデータを2倍にします。
returnData(doamin+"/1.0/search",{userid:"12033914132",keyword:""},"search");
新しい検索語を入力するたびに同じ関数を呼び出したい。
observable を使用してデータを更新できることはわかっていますが、古いバインディングをクリアして新しいバインディングを追加したい
function SearchViewModel(data,id,url,userdata) {
var self = this;
// Editable data
var ParsedData = JSON.parse(data);
self.Contacts = ko.observableArray(ParsedData.Contacts);
self.Sms = ko.observableArray(ParsedData.Sms);
self.Calendar = ko.observableArray(ParsedData.Calendar);
self.Logs = ko.observableArray(ParsedData.Logs);
self.Total = ko.toJS(self.Contacts).length+ko.toJS(self.Sms).length+ko.toJS(self.Calendar).length;
self.ContactsCount = ko.toJS(self.Contacts).length;
self.SmsCount = ko.toJS(self.Sms).length;
self.CalendarCount = ko.toJS(self.Calendar).length;
}