使用ajax映射/可观察对象

时间:2012-10-09 21:56:30

标签: ajax knockout.js

我使用以下ajax代码来获取一个名为Client的对象,它的ID是这样的:

$.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的值绑定到文本框,则其值不是这样,更改文本框不会更新该值。我不想创建函数和推送方法,我喜欢能够简单地将返回的对象放入,以便将来的更改无缝。我能做些什么来使它们成为可观察的值?

1 个答案:

答案 0 :(得分:1)

selectedClient应该是可观察的,如果你想要反映UI中的变化,那么它的属性也是如此。

您是如何创建selectedClient的?

你应该创建一个这样的类:

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

在您的viewmodel中有一个属性,如下所示:

selectedClient = ko.observable()

你的ajax成功方法应该是:

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

这将确保只要对象的属性发生更改,您的视图就会反映出来。有关详细信息,请参阅以下链接:

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