0

在我的应用程序中,我想将 ajax 响应中knockout的项目添加到 observableArray。我的html:

<select id="mySelect" data-bind="options: MyArray"></select>

所以我有简单的视图模型:

var viewModel = { MyArray: ko.observableArray() };

在我的脚本中之后:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "MyUrl",
        type: "GET",
        success: function () {
            viewModel.MyArray.push('foo');
        }
    });
});

然后什么也没发生。如果我将此代码更改为:

$(document).ready(function() {
    ko.applyBindings(viewModel);
    viewModel.MyArray.push('foo');
});

一切正常。(这当然只是简单的例子)。

我怎样才能解决这个问题?

任何帮助,将不胜感激。

更新:

我犯了一些错误,因为问题是wijmo。它将选择更改为 div,我必须调用

 $("#mySelect").wijdropdown('refresh');

添加元素后。

4

2 回答 2

0

将调用中的success参数更改为在请求完成时执行,无论成功还是失败。使用下面的代码检查您的请求状态,以帮助确定它为什么不工作:$.ajaxcomplete

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "MyUrl",
        type: "GET",
        complete: function (jqXHR, textStatus) {
            viewModel.MyArray.push('foo');

            window.console.log(jqXHR);
            window.console.log(textStatus);
        }
    });
});

更新:如果这不是问题,请尝试使用以下内容初始化您的可观察数组:

MyArray: ko.observableArray([])
于 2013-06-06T18:06:35.623 回答
0

看到这个小提琴:http: //jsfiddle.net/jaq316/hEjWz/

HTML:

<select data-bind="options: MyArray"></select>

JavaScript:

var viewModel = { MyArray: ko.observableArray() };

$(document).ready(function() {
    ko.applyBindings(viewModel);
    $.ajax({
        url: "http://baconipsum.com/api/?type=meat-and-filler",
        type: "GET",
        success: function (data) {
            for (i = 0; i < data.length; i++)
            {
                viewModel.MyArray.push(data[i]);
            }
        }
    });
});

这完美地工作。我的建议是检查网络流量,看看你的 ajax 请求是否真的成功完成。

于 2013-06-07T13:17:06.247 回答