从ajax提取数据到observableArray

时间:2018-10-23 07:23:51

标签: javascript jquery knockout.js

我想将数据从ajax推送到淘汰的observableArray,但这给我一个错误:

  

初始化可观察数组时传递的参数必须是   数组,或者为null,或者为undefined。

efine(['uiComponent', 'ko', 'jquery'], function (Component, ko, jquery) {

    return Component.extend({
        initialize: function () {
            this._super();

            /* State and cities */

            this.selectCity();
        },

        selectCity: function () {
var myViewModel = {}; 
            state = ko.observableArray([]);

            jquery.ajax({
                url: 'http://127.0.0.1/magento/hamechio/region.php',
                type: "GET",
                dataType: "json",
                success: function(data) {
                    myViewModel = data;
                    state.push(data);
                }
            });

            console.log(state); 
        }

    });
});

3 个答案:

答案 0 :(得分:2)

据我所知,此行应更改。

 state = ko.observableArray([]);

对此

var state = ko.observableArray();

答案 1 :(得分:2)

这是ajax作用域查询。

您可以使用'var'。

像这样:

var state = ko.observableArray([]);

答案 2 :(得分:0)

我可以建议您浏览一下包含许多可用示例的文档:https://knockoutjs.com/documentation/observableArrays.html

首先,您的视图模型是构建所有程序的对象。该对象包含所有要显示的数据(作为可观察到的可观察属性“方法”)和要接收的命令(功能)。因此,您需要定义视图模型以包含应用程序需要做的所有事情:

var viewModel = {
    //Bindings
    state = ko.observableArray();
}

现在您可以写入viewModel.state()

如果数据是数组,并且您不想跟踪对数据项的更改:

viewModel.state(data);

或一次推入一个:

data.foreach(function(el){ viewModel.state.push(el); });

如果要跟踪对每个项目的属性的更改,则需要使用第二种方法,并将每个元素转换为由ko.observable s组成的对象。