Knockout:加载带有ajax的可观察数组

时间:2018-05-29 13:10:20

标签: javascript jquery ajax knockout.js

我遇到了将所选选项绑定到下拉列表的问题

这是我的代码:

@Html.SelectListFor(m => m.State,
new { data_bind = "options: availableStates,  optionsText: 'Name', 
                   optionsValue: 'Id', selectedOptions: selectedStates
    })

在我的页面加载中,我想在此下拉列表中设置我的选项,因此我有以下的淘汰代码:

 $.ajax({
            url: rootDir + "/Home/GetStates",
            type: "GET",                
            contentType: "application/json",
            success: function (data) {
                var jsonResult1 = JSON.parse(data);                    
                data1 = jsonResult1;
                for (key in jsonResult1) {
                    var item = {
                        Id: jsonResult1[key].Id,
                        Name: jsonResult1[key].Name
                    };
                    self.availableStates.push(item);
                }
            }
       });

  self.selectedStates = ko.observableArray(vmData.State || "");
  //vmData.State has the previous selected values from the db 

我的问题是当我调试上面的代码时,上面的ajax调用在最后执行,而selectedStates语句在之前执行。由于之后执行了ajax调用,因此下拉列表为空,并且下拉列表中没有设置任何内容。

我可以直接将上面的ajax代码放在我的knockout js文件中并加载可用状态的可观察数组吗?

1 个答案:

答案 0 :(得分:0)

您可以在viewmodel中创建一个公共方法,该方法处理ajax-call并推送到availableStates observable。实例化VM时,可以在applyBindings之前调用此方法。

编辑:可能错字但仍然:

{{1}}

数据绑定不是data_bind