0

我使用以下 ajax 代码通过它的 id 获取一个名为 Client 的对象,如下所示:

$.ajax({
            url: "api/client/GetClient/" + id,
            contentType: 'json',
            success: function (result) {
                model.selectedClient(result);
                $("#loader").hide();
            },
            failure: function (result) {
                alert(result.d);
                $("#loader").hide();
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert("An error occurred, please try again.");
                $("#loader").hide();
            }
        });

但是,尽管 selectedClient 是可观察的,但如果我将 say selectedClient().Name 的值绑定到文本框,则它的值不是这样,更改文本框不会更新值。我不想创建一个函数和一个 push 方法,我喜欢能够简单地将返回的对象放入,以便将来的更改是无缝的。我该怎么做才能使它们成为可观察的值?

4

1 回答 1

1

selectedClient如果您想反映 UI 中的更改,它应该是可观察的,它的属性也是如此。

你是如何创建你 selectedClient 的?

您实际上应该像这样创建一个类:

Client = function(data){
    ko.mapping.fromJS(data,{},this);
}

在您的视图模型中有这样的属性:

selectedClient = ko.observable()

你的ajax成功方法应该是:

success: function (result) {
            model.selectedClient(new Client (result));
            $("#loader").hide();
         }

这将确保无论何时您的对象的属性发生变化,您的视图都会反映它。有关更多信息,您可以参考此链接:

http://knockoutjs.com/documentation/plugins-mapping.html

于 2012-10-10T03:50:16.850 回答