2014-06-05 21 views
1

我想動態生成列表條目並將它們作爲jsonstore文檔同時添加到本地存儲中。將文檔添加到工作環境中的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++; 

     } 

只有一個文件被添加,因爲我覺得工作燈不會自動放在一個隊列中添加請求和取消的是最後一個,如果以前沒有解決或某事沿着這些路線。

所以,當我這樣做是這樣的:

 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)/時間循環),這應該是有限的。

編輯:實際上,如果我們假設worklight不會將文檔放入添加隊列中,則每次循環循環時都會替換初始添加請求,並且它永遠不會完成,這就解釋了崩潰。

編輯2:嘗試與一個遞歸函數調用本身的東西,直到j達到7代替環

回答

1

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*/ 
}); 
+0

噢,猜猜這樣寫起來更容易。我想知道這是否等同於我的解決方案。請注意,仍然沒有解決方案來生成一個組件並將其添加到存儲**在同一個循環**中。 – IazertyuiopI

+0

傳遞一個數組應該比遞歸地在你的答案中調用'add_documents'函數的開銷少。也就是說,最終的結果應該是一樣的。您總是可以添加[break points](https://developer.chrome.com/devtools/docs/javascript-debugging)來查看jsonstore.js代碼的工作方式。 – cnandreu

2

編輯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;} 
};