Knockout observable不渲染到屏幕

时间:2015-06-19 14:44:59

标签: javascript knockout.js

我有一个通过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")

    } 

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您正在使用ajax调用返回的普通值替换observable对象。您需要使用当前的可观察函数来更新这样的值(从内存中,但我确信它会工作)。

  vm.setDate = function () {
        if (vm.approval.SomeDate == "Active")
        vm.approval.SomeDate = currentdateandtime;
    }