私は次のようにビューモデルを更新するためにマッピングプラグインを使用しています:
$.ajax({
type: "POST",
url: url,
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (json) {
if (json.Page == 1) {
ko.mapping.fromJS(json, {}, self);
} else {
self.List().push(ko.mapping.fromJS(json.List));
}
console.log(ko.toJSON(self.List()));
},
});
ただし、List()監視可能配列を更新する代わりに(ajax呼び出しの完了時に新しいアイテムのみを追加します-2ページ目(DBからの次のいくつかのアイテム))、コンソール出力に新しいリスト=>注意 "["要素を追加します。
AJAX応答(json)
{"DiscountType": "Transaction"、 "List":[{"ActivationDate": "/ Date(1427215761818)/"、 "CustomerName": "Another two 2"、 "CustomerNumber":4328、 "Percent":20、 "HasDiscount":true}、{"ActivationDate": "/ Date(1428079761818)/"、 "CustomerName": "Another tree"、 "CustomerNumber":1212、 "Percent":20、 "HasDiscount":true}]、 "2ページ}
コンソール出力:
[{"ActivationDate": "/ Date(1388556000000)/"、 "CustomerName": "Test1Inc。"、 "CustomerNumber":10032、 "Percent":20、 "HasDiscount":true}、{"ActivationDate": " / Date(1426783761818)/ "、" CustomerName ":" Another One 1 "、" CustomerNumber ":5174、" Percent ":20、" HasDiscount ":true}、[{" ActivationDate ":" / Date(1427215761818)/ "、" CustomerName ":" Another two 2 "、" CustomerNumber ":4328、" Percent ":20、" HasDiscount ":true}、{" ActivationDate ":" / Date(1428079761818)/ "、" CustomerName ":"別のツリー "、" CustomerNumber ":1212、"パーセント ":20、" HasDiscount ":true}]]
私は何が間違っているのですか?
返された配列の個々の要素をプッシュするには、次のようにします。
success: function (json) {
if (json.Page == 1) {
ko.mapping.fromJS(json, {}, self);
}
else {
json.List.forEach(
function(element) {
self.List.push( ko.mapping.fromJS(element) );
} );
}
console.log(ko.toJSON(self.List()));
}
var vm = function() {
var self = this;
self.List = ko.observableArray([]);
self.initiate = function() {
json = JSON.parse('{"DiscountType":"Transaction","List":[{"ActivationDate":"/Date(1427215761818)/","CustomerName":"Another two 2","CustomerNumber":4328,"Percent":20,"HasDiscount":true},{"ActivationDate":"/Date(1428079761818)/","CustomerName":"Another tree","CustomerNumber":1212,"Percent":20,"HasDiscount":true}],"Page":2}');
json.List.forEach(function(entry) {
self.List.push(ko.mapping.fromJS(entry));
});
};
};
vm = new vm();
ko.applyBindings(vm);
vm.initiate();
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js'></script>
<html>
<div data-bind='foreach: List'>
<div data-bind='text: ActivationDate'></div>
</div>
</html>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加