Я не JSON подходит как вложенные массивы, как следоватьkomapping.toJS не отображает вложенный наблюдаемый массив
[
{
"Amount": 3250,
"CustomerAccountNumber": 1,
"EntityName": "a",
"Id": 1,
"IsValidationSuccess": false,
"IsWorkInProgress": true,
"ValidationErrors": [
{
"CreationDate": "2017-01-23T00:00:00",
"Reason": "Error1"
},
{
"CreationDate": "2017-01-23T00:00:00",
"Reason": "error2"
}
]
},
{
"Amount": 450,
"CustomerAccountNumber": 1,
"EntityName": "s",
"Id": 4,
"IsValidationSuccess": false,
"IsWorkInProgress": true,
"ValidationErrors": [
{
"CreationDate": "2017-01-23T00:00:00",
"Reason": "error"
}
]
},
{
"Amount": 5600,
"CustomerAccountNumber": 2,
"EntityName": "f",
"Id": 2,
"IsValidationSuccess": false,
"IsWorkInProgress": true,
"ValidationErrors": [
{
"CreationDate": "2017-01-23T00:00:00",
"Reason": "error"
}
]
}
]
тогда я группе клиента нет и entityEntityName и заполнить модель наблюдаемого массив, используя который дает мне следующий JSON
[ { "Count": 2, "CustomerAccountNumber": 1, "Entities": [ { "Count": 1, "Entity": [ [object Object] ], "EntityName": "a", "Sum": 3250 }, { "Count": 1, "Entity": [ [object Object] ], "EntityName": "b", "Sum": 450 } ], "Sum": 3700 }, { "Count": 1, "CustomerAccountNumber": 2, "Entities": [ { "Count": 1, "Entity": [ [object Object] ], "EntityName": "c", "Sum": 5600 } ], "Sum": 5600 } ]
, а затем, когда мне нужно вернуться в JS, то TOJs не отображение вложенных массивов, но модель связывания в HTML с нокаутом связывает данные правильно.
komapping.toJS(viewModel.result())
дает мне следующий результат - он не отображает вложенный массив, есть ли способ, мы можем это исправить?
обновление
viewModel = function() {
var self = this;
self.transactionLines = ko.observableArray();
self.result = ko.observableArray();
}
После AJAX нагрузки Я толкаю объект observableArray после группировки
var byAccountNo = groupBy(data, function (item) {
return [item.CustomerAccountNumber];
});
_.each(byAccountNo, function (item) {
var byEntity = groupBy(item, function (i) {
return [i.EntityName];
});
var obj = {
CustomerAccountNumber: item[0].CustomerAccountNumber,
Entities: ko.observableArray()
};
_.each(byEntity, function (itemEntity) {
var objByEntity = {
EntityName: itemEntity[0].EntityName,
Entity: ko.observableArray()
};
_.each(itemEntity,
function (inner) {
var result = ko.mapping.fromJS(inner);
self.transactionLines.push(result);
objByEntity.Entity.push(result);
});
objByEntity.Sum = ko.pureComputed({
read: function() {
var total = 0;
_.each(objByEntity.Entity(), function (item) {
total += item.Amount();
});
return total;
},
owner: objByEntity
});
objByEntity.Count = ko.pureComputed({
read: function() {
return objByEntity.Entity().length;
},
owner: objByEntity
});
obj.Entities.push(objByEntity);
});
obj.Sum = ko.pureComputed({
read: function() {
var total = 0;
_.each(obj.Entities(), function (item) {
total += item.Sum();
});
return total;
},
owner: obj
});
obj.Count = ko.computed({
read: function() {
var total = 0;
_.each(obj.Entities(), function (item) {
total += item.Count();
});
return total;
},
owner: obj
});
self.result.push(obj);
});
};
все в этом объекте создается вручную, но все же он отображает все, кроме вложенного массива Entity. ko.js тоже не работает, и toJSON даст строку, которую я не хочу. – jjj
@JitendraAanadani вам нужно предоставить больше кода. Как вы изменяете свои данные? Как определяется ваш 'viewModel'? –
обновлен с помощью кода Viewmodel – jjj