【问题标题】:adding documents to worklight jsonstore in a loop在循环中将文档添加到 worklight jsonstore
【发布时间】:2014-07-26 10:30:17
【问题描述】:

我想动态生成列表条目,同时将它们作为 jsonstore 文档添加到我的本地存储中。

当我这样做时:

     var j=0;
       while(j<7) {

        /* populating our jsonstore */   
        accessor.add({stuff_to_add})
        .then(function(){})

        /* showing it to the user */
        $('<li>').attr({attributes}).html('html').appendTo('element');   
        j++;

       }

只有一个文档被添加,因为我认为 worklight 不会自动将添加请求放入队列中,并且如果前一个未解决或类似这些问题,则取消最后一个。

所以当我这样做时:

      var j=0;
       while(j<7) {

        /* populating our jsonstore */   
        accessor.add({stuff_to_add})
        .then(function(){

        /* showing it to the user */
        $('<li>').attr({attributes}).html('html').appendTo('element');   
        j++;   })

       }

Mozilla 完全崩溃,甚至没有成功停止脚本我不明白为什么,因为它应该只调用 add 函数多次 = (调用时间 (accessor.add) / time to loop) 这应该是有限。

编辑:实际上,如果我们假设 worklight 没有将文档放入添加队列中,则每次循环循环时都会替换初始添加请求,并且它永远不会完成,这就解释了崩溃。

编辑 2:尝试使用递归函数调用自身,直到 j 达到 7 而不是循环

【问题讨论】:

    标签: javascript ibm-mobilefirst jsonstore


    【解决方案1】:

    编辑 2 胜:

    var j=0;
           while(j<7) {
    
            /* creating the ui*/
            $('<li>').attr({attributes}).html('html').appendTo('element');
            j++;
    
           }
    
           /* populating jsonstore */
    
          add_documents(0,stuff_to_add);
    

    其中 add_documents(0,stuff_to_add) 定义如下:

    add_documents = function(n,stuff_to_add){ 
    
        if(n<7){
            accessor.add({stuff_to_add})
            .then(function(){alert(n);add_documents(n+1,stuff_to_add);});
        }
        else
        {return true;}
    };
    

    【讨论】:

      【解决方案2】:

      add API 可以采用 JSON 对象数组,例如:

      var data = [{name: 'carlos'}, {name: 'mike'}];
      
      WL.JSONStore.get('collection').add(data)
      
      .then(function () {
      
        /*update the UI here*/
      
        var len = data.length;
        while (len--) {
          console.log(data[len].name);
        }
      
      })
      
      .fail(function (err) {
        /*handle failure*/
      });
      

      【讨论】:

      • 哦,好吧,猜猜这样写更容易。我想知道这是否等同于我的解决方案。请注意,仍然没有生成组件并将其添加到商店的解决方案在同一循环中
      • 传递一个数组应该比在你的答案中递归调用add_documents 函数具有更少的开销。也就是说,最终结果应该是相同的。您可以随时添加break points 以查看 jsonstore.js 代码的工作原理。
      猜你喜欢
      • 2021-12-27
      • 2014-08-07
      • 2014-08-16
      • 2014-10-10
      • 2022-10-09
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      相关资源
      最近更新 更多