Knockout从json返回可观察数组

时间:2013-08-02 20:57:18

标签: javascript knockout.js

我有这个视图模型从实体famework获取数据。我能够成功地将它从JSON转换为数组,但它是不可观察的。我已经尝试创建一个具有可观察属性的模型,然后用for填充for,但这似乎不起作用。我也尝试使用ko.mapping.fromJSON,它似乎在服务端正常工作,但它在视图中总是为空。

function(logger, system, router, employeeService) {
var EmployeeDetails = ko.observableArray([]);


Activate Function -
    var activate = function () {
    return  GetEmployeeDetails(),GetTermList();
    };

 var vm = {
       activate: activate,
        FindID: ko.observable(),
        EmployeeDetails:  EmployeeDetails
     }


};


function GetEmployeeDetails() {
      return employeeService.getemployeeDetails(EmployeeDetails);

    }

//这是我的employeeService类中的函数

 var getEmployeedetails = function(employeeDetailsOb) {
        var jsonfromServer;
        $.ajax({
            type: "POST",
            dataType: "json",
            url: "/api/employee/getAllDetails/",
            data: '{}',
             success: function(data) {
                jsonfromServer = $.parseJSON(data);

      },
 error:
{ //error stuff})

Return employeeDetailsOb(jsonFromServer);
}

2 个答案:

答案 0 :(得分:0)

假设您在尝试从该调用实际成功返回之前尝试从getEmployeeDetails(...)返回EmployeeDetails()对象,请尝试将vm.EmployeeDetails初始化置于您的成功处理程序中:

success: function(data) {
    jsonfromServer = $.parseJSON(data);

    for (var i = 0; i < jsonFromServer.list.length; ++i)
    {
        vm.EmployeeDetails.push(jsonFromServer.list[i]);
    }
},

答案 1 :(得分:0)

我认为一旦将EmployeeDetails设置为可观察数组,您就可以像这样设置可观察数组数据:

vm.EmployeeDetails(jsonfromServer.list);