毛を抜いています!! 私はすべての例、チュートリアルなどを読みました。他の人はこれを非常に簡単にしているように見えますが、私は Knockout が初めてで、これを機能させることができません。
jquery ajaxリクエストから値をバインドしたいユーザープロファイルフォームがあります。基本的に、サーバーからプロファイルを取得し、以前に保存したデータをフォームの値にロードできるようにしたいと考えています。マッピング プラグインを使用して、API から JSON を要求し、値をフォームに読み込むことができます (データベースにプロファイルを事前に入力しました)。
$.getJSON("api/profile/" + "<?php echo $_SESSION['id']; ?>",function(json){
var viewModel = ko.mapping.fromJS(json);
ko.applyBindings(viewModel);
});
これはうまくいきます。私が抱えている問題は投稿側にあります。ユーザーが初めてフォームに入力して保存ボタンをクリックすると、すべての値が JSON でサーバーにポストバックされますが、1 つのフィールドのみを変更してから再度保存すると、変更された値のみがポストされ、他のすべての値はnullとして投稿されます
私が使用しているビューモデル (ko.observalbe()、「」値などでこれを試しました!)
viewModel ={}
ここに私の保存呼び出しがあります:
viewModel.save = function(){
$.ajax({
url:"api/profile/" + "<?php echo $_SESSION['id']; ?>",
contentType: 'application/json',
data: ko.mapping.toJSON(viewModel),
type: "POST",
dataType: 'json',
success: function(data) {
alert("What's UP!");
alert(data)
},
error: function (data) { alert("error" + data); }
});
}
保存の「データ」行と、ノックアウトが値にバインドする方法に関係していることは知っていますが、私の人生ではそれを理解することはできません. どんな援助でも大歓迎です!
これは、検索する人にとって最終的に機能する最終的なコードです。
<script type="text/javascript">
var viewModel;
function callback(data) {
if (viewModel) {
// model was initialized, update it
ko.mapping.fromJS(data, viewModel);
} else {
// or initialize and bind
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
}
}
save = function() {
$.ajax({
url:"api/profile/" + "<?php echo $_SESSION['id']; ?>",
contentType: 'application/json',
data: ko.mapping.toJSON(viewModel),
type: "POST",
dataType: 'json',
success: function(data) {
alert( ko.mapping.toJSON(viewModel));
},
error: function (data) { alert("error" + data); }
});
}
$.ajax({
url: "api/profile/" + "<?php echo $_SESSION['id']; ?>",
contentType: 'application/json',
type: "GET",
dataType: 'json',
success: function(data) {
callback(data);
}
});
</script>