推送json以淘汰observable数组

push json to knockout observable array

本文关键字:observable 数组 淘汰 json 推送      更新时间:2023-09-26

我有一些可观察的单选按钮,根据值的不同,我想触发一个GETXON-方法来返回我的数据,然后将其推送到我显示为列表的可观察数组中。我得到的错误是无法读取未定义的属性"push"。这是我的Fiddle

单击单选按钮触发getjson方法后,如何将此数据获取到我的可观察数组?

self.currentAnswer = ko.observable();
    self.recipientList = ko.observableArray([]);
self.currentAnswer.subscribe(function (newValue) {
    if (newValue == 'Internal') {
        $.getJSON('GetInfo', function (data) {
            var result = $.parseJSON(data);
            self.recipientList.push(result);

        });

需要考虑的事项:

  • $.getJSON()将为您解析JSON,您永远不需要自己解析。$.get()也是如此(*)
  • 击倒可观察性是函数。您可以将它们用作回调(**)

有了这些知识:

self.recipientList = ko.observableArray();
self.currentAnswer = ko.observable();
self.currentAnswer.subscribe(function (newValue) {
    if (newValue == 'Internal') {
        $.get('GetInfo').done(self.recipientList);
    }
});

(*)如果在成功回调中没有得到解析的JSON,请修复响应的Content-Type标头。

(**)如果您调用一个observable并传递一个值作为第一个参数,它将存储该值。巧合的是,jQuery调用Ajax成功回调,并将返回的值作为第一个参数传递。完美贴合。

我更新了您的Fiddle,使其正常工作。基本上你需要调用self.recipientList.push.apply(self.recipientList, result);

https://jsfiddle.net/jsw1ezut/9/