サーバーからjsonオブジェクトを取得して、ビューにデータを取り込みます。その後、データを変更してサーバーに戻します。私は、データの新しいコピーを取得し、変更を加えて自分のビューを更新することを望みます。しかし、それは起こりません。 TIAKnockout.js ko.mapping.toJSビュー内のデータを更新しません。
$(document).ready(function() {
var customer_id = get_customer_id();
var data = load_model();
contract_model = ko.mapping.fromJS(data,{});
ko.applyBindings(contract_model);
}
function load_model(){
var url = '/ar/contract_json?contract_id='+get_contract_id();
var data = '';
$.ajax({
type:'GET',
url:url,
async:false,
success: function(returningValue){
data = returningValue;
}
});
return data;
}
この初期ロードは正常に機能します。私はいくつかのことを行い、観測値の1つを変更し、そのデータをサーバーに戻します。サーバーが更新を取得した後、新しいビューを更新するようにデータの新しい取得を行います(新しいデータを1ステップで返すことができますが、これはコードではまだリファクタリングしていません)。
function refresh_data(contract_model){
var url = '/ar/contract_json?contract_id='+get_contract_id();
$.post(url,function(data){
console.log(data);
ko.mapping.fromJS(contract_model,{},data);
ko.applyBindings(contract_model);
console.log(ko.mapping.toJS(contract_model))
});
}
function refresh_data(contract_model){
var url = '/ar/contract_json?contract_id='+get_contract_id();
$.post(url,function(data){
console.log(data);
ko.mapping.fromJS(contract_model,{},data);
console.log(ko.mapping.toJS(contract_model))
});
}
function push_model(contract_model,refresh){
var url = '/ar/update_contract';
var data = {'contract':ko.mapping.toJSON(contract_model)}
delete data['lines'];
$.post(url,data,function(return_value){
if (refresh){
refresh_data(contract_model);
};
});
}
コンソールメッセージには新しいデータが戻ってきますが、私のビューは更新されません。
マッピングプラグインのKnockOutドキュメントは、IMOで、ko.mapping.fromJS(...)を呼び出す構文が間違っています。 ko.mapping.fromJS(data、viewModel)、明らかにこれは次のようにする必要があります。ko.mapping.fromJS(data、{}、viewModel) –
これに費やされた時間。ありがとう、これは大きな助けでした。 –
私もこれに数時間を費やしました。私はあなたに6つのパックを借りている – stackoverfloweth