我有一个通过ajax返回JSON对象的应用程序。我试图将这些对象传递给DOM,但有些东西不起作用。这是淘汰赛代码
function PanelViewVM() {
var self = this;
self.Panel = ko.observable("test");
self.Source = ko.observable();
self.SelectPanel = function () {
$.ajax("/DPanel/FillIndex", {
dataType: 'json',
contentType: 'application/json',
success: function (data) {
self.Panel = data.PanelDetails[0].Panel;
self.Source = data.PanelDetails[0].Source;
//ko.mapping.fromJS(data.PanelDetails, {}, self.PanelDetails);
},
error: function (data) {
console.log(data);
}
});
};
self.SelectPanel();
};
ko.applyBindings(new PanelViewVM());
当我在VS中运行代码并在ajax请求的末尾放置一个中断时,它声明self.Source和self.Panel已分配数据。但是,这并没有反映在DOM中。我还放了一个"测试"面板中的占位符可观察。这会按预期传递给DOM。
@using System.Web.Optimization
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<div class="row">
<p>Panel:<strong data-bind="text: Panel"></strong></p>
<p>Source:<strong data-bind="text: Source"></strong></p>
</div>
@section Scripts {
@Scripts.Render("~/bundles/knockout")
@Scripts.Render("~/Scripts/ViewModel/PanelViewVM.js")
}
有什么想法吗?
答案 0 :(得分:1)
您正在使用ajax调用返回的普通值替换observable对象。您需要使用当前的可观察函数来更新这样的值(从内存中,但我确信它会工作)。
vm.setDate = function () {
if (vm.approval.SomeDate == "Active")
vm.approval.SomeDate = currentdateandtime;
}