javascript - 使用 ajax 调用中的数据 knockout 更新可观察数组的每个元素的属性

标签 javascript jquery ajax knockout.js ko.observablearray

我有一个 ViewModel“AppViewModel”,它正在获取 JSON 数据来创建模型,属性“totalSessions”之一要使用ajax调用来获取,“模型”AppViewModel返回一个可观察的数组,我的代码运行没有任何错误,但 View 似乎没有更新。

    var jsonapparray = [];

   function AppViewModel(appsdata)
{
    var self = this;        
    var appsdata = $.parseJSON("["+ JSON.stringify(appsdata["user_of"]) + "]");

    var totalSessions = 0;
    var i = 0;               
    for (var appkey in appsdata[0]) {
      console.log(appsdata[0][appkey].name);
      var elem = new Object();
      elem._id = appsdata[0][appkey]._id;
      elem.category = appsdata[0][appkey].category;
      elem.country = appsdata[0][appkey].country;
      elem.name = appsdata[0][appkey].name;
      elem.key = appsdata[0][appkey].key;
      elem.timezone = appsdata[0][appkey].timezone;
      elem.totalsessions = 000;   
      jsonapparray.push(elem);
      updateSessionsInfo(i,elem,jsonapparray);
      i++;    
    }

    self.AppCount = i;
    self.Apps = ko.observableArray(jsonapparray);   

    function updateSessionsInfo(i,elem,jsonapparray)
    {          
        $.ajax({
                type:"GET",
                url:Domain + "/o",
                data:{
                    "api_key":readCookie("api_key"),
                    "app_id":elem._id,
                    "method":"sessions"
                },
                dataType:"jsonp",
                async: false,
                success:function (json) {                   
                    _sessionDb = json;
                    var totalSessions = _.pluck(_sessionDb,"t");                                    
                    jsonapparray[j].totalsessions = totalSessions[0];
                }
            });     
    }   

}

最佳答案

你应该改变:

jsonapparray[j].totalsessions = totalSessions[0];

至:

jsonapparray[i].totalsessions = totalSessions[0];

但这实际上并没有帮助。更新数组中项目的属性不会触发更新。您应该使所有属性都可观察,例如:

elem.totalsessions = ko.observable(0);

然后像这样更新值:

jsonapparray[i].totalsessions(totalsessions[0]);

关于javascript - 使用 ajax 调用中的数据 knockout 更新可观察数组的每个元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24118127/

相关文章:

javascript - for-await-of 是否等待当前迭代完成后再进行下一次迭代?

javascript - 为什么扩展运算符将我的数组转换为数字

javascript - 弹出 block - jQuery

javascript - 用于拖放、分组和向下钻取的优秀 JavaScript 或 AngularJS 工作流程框架是什么?

javascript - jquery 事件函数无法正常工作

javascript - 是否有将 React Elements javascript 代码转换为 JSX 的工具

javascript - 使用 jquery 使用 .class 标识符从选择列表中选择值错误

javascript - jQuery:记录数组中元素的变化并通过索引检查它的变化

java - 单击复选框后面板重新加载

c# - 增加 ASP.NET 页面方法的最大响应大小