У меня проблема с отображением массива JSON, сгенерированного .NET JavaScriptSerializer
, в knockout.js. Массив создается следующим образом (для простоты сокращен):
OrderProposalFacade[] proposals = new OrderProposalFacade[order.OrderProposals.Count];
foreach (OrderProposal proposal in order.OrderProposals)
{
proposals[i++] = new OrderProposalFacade(proposal);
}
ViewBag.OrderProposals = new JavaScriptSerializer().Serialize(proposals);
Сгенерированная строка JSON выглядит примерно так:
[{ "ProposalId":1,"ProgrammedWeek":null,
"ProposalValue":120,"ProposalValueCorrected":130,
"ProposalDateSent":"01-12-2011","ProposalDateCorrected":"01-12-2011",
"ServiceId":1,"ServiceDescriptiveId":"OS001","ProposalState":2
},
{//another similar object}
]
В представлении ASP.NET MVC я делаю это для привязки массива:
var initialData = ko.mapping.fromJSON(<%: new HtmlString(ViewBag.OrderProposals as string) %>);
var viewModel = {
proposals: ko.observableArray(initialData),
//some methods; removed to ease reading
};
ko.applyBindings(viewModel);
Проблема: массив proposals
должен отображаться шаблоном knockout.js, но ничего не отображается. Используя Firebug, я не вижу никаких объектов в массиве initialData
, поэтому я предполагаю, что при его инициализации произошла ошибка и, следовательно, proposals
. Привязка к шаблону выглядит так:
<div id="service-orders" data-bind='template: { name: "proposal-template", foreach: proposals }' style="margin:0 -.7em 0 -0.5em;"></div>
Если я удаляю ko.mapping.fromJSON()
, все работает нормально, то есть шаблон отображается со значениями в массиве proposals
. Но возникает другая проблема, когда я обновляю значение объекта в массиве initialData
. Насколько я понимаю, если я обновлю наблюдаемое свойство, шаблон будет визуализирован снова (следовательно, отображение knockout.js), но без отображения всех свойств этого не произойдет, верно?
Короче , мне нужно отобразить все свойства в массиве initialData
, чтобы сделать их видимыми для обновления моего представления, когда я изменяю значение одного из его объектов, но это не так т работает.
Есть идеи? Заранее спасибо!