繁体   English   中英

如何通过Ajax调用在剔除JS中填充数据

[英]How to populate data in knockout js through ajax call

我有一个JSON对象,我正在从servlet响应以剔除js。 我想在我的视图模型中为此代码编写该数据。

success: function (data) 
{ 
    var jsondata = data['jsonObj'];
    self.PopulateStates = ko.computed(function(){
        ko.utils.arrayForEach(jsondata, function(item){
            self.States.push(new State(item));
        });
    }); 
}, 
error: function (exception) 
{ 
    alert( "fail" ); 
} 
});

我的JSON对象作为字符串看起来像这样

{data:[{"id":"5345345","name":"dsfsdf","ssc":"","bic":"dgffdgfdg"},{"id":"123456","name":"SBI","ssc":"654321","bic":"vxvxc"}]}

js小提琴的链接是演示我的错误是什么? 还是我需要通过映射淘汰赛js插件来做到这一点?

我使用在使用前声明的此剔除扩展名。

ko.observableArray.fn.map = function (data, Constructor) {
    var mappedData = ko.utils.forEach(data, function () {
        return new Constructor(data);
    });

    this(mappedData);

    return this;
}

然后在我的$.ajax请求中执行以下操作:

success: function (data) 
{ 
    var jsondata = data['jsonObj'];
    self.PopulateStates = ko.observableArray().map(data, State);
}); 

您将结果存储在computed可观察值中,这不是您所需要的。

我注意到的另一件事是,您的jsondata是使用从GET返回的数据设置的。 您正在向字段jsonObj询问该数据,但是,查看您的JSON,似乎您没有此字段。 我认为您说的是将data作为返回字段列表的字段是正确的。

如果在您的视图模型中您已经声明了self.PopulateStates ,我想您已经声明了。 你可以这样做:

var State = function (data) {
    var self = this;

    self.property = ko.observable().set(data, "property");
}

var viewModel = function () {
    var self = this;
    self.PopulateStates = ko.observable();

    function getStates() {
        var request = $.ajax();

        request.done(function (data, msg) {
            if (data) self.PopulateStates.map(data, State);
        });
    }
}

如果您在State模型中注意到,则我具有使用自定义observable函数进行设置的self.property 所有要做的就是如果有数据将该属性设置为,请对其进行设置。 否则,给它一个默认值。 当我希望它使用数据为我构造一个对象时,我还会使用第三个参数。 这是我说的一个具有modifiedBy属性的联系人,而这个modifiedBy是一个用户对象(或只是一个复杂对象)

编辑

最主要的是jQuery include,这不是错误,但不是必需的。 Knockout的构建独立于jQuery因此您可以在$(document).ready(function () {}) ,以确保不需要在DOM上加载此代码。 这意味着如果页面不需要它,则不必包括jQuery

这是更新小提琴 ,现在可以使用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM