推json敲出可观察的数组

时间:2016-03-25 14:10:04

标签: javascript json knockout.js

我有可观察的单选按钮,根据我想要触发GETJSON方法的值来返回我的数据,然后将其推送到我正在显示为列表的可观察数组。我得到的错误是 无法读取undefined属性'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);


        });

2 个答案:

答案 0 :(得分:1)

我更新了你的小提琴以便它可以工作。基本上你需要拨打self.recipientList.push.apply(self.recipientList, result);

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

答案 1 :(得分:1)

需要考虑的事项:

  • $.getJSON()将为您解析JSON,您自己永远不需要这样做。 $.get()也是如此。 (*)
  • Knockout observables是函数。您可以将它们用作回调。 (**)

有了这些知识:

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成功回调,将返回值作为第一个参数传递。完美契合。