2017-07-13 11 views

Répondre

0

Vous avez (au moins) deux options. Si vous avez beaucoup de travail pour chaque élément de la liste (par exemple, afficher une vignette pour une image), alors vous pouvez utiliser la deuxième approche. Sinon, vous pouvez simplement utiliser cette approche simple (où je montre des statistiques pour un certain nombre d'espèces - mise en page contrôlée dans un contrôleur séparé). stats ma liste:

function showSpecies(stats) { 
    _.each(stats, function(record){ 
     $.form.add(Alloy.createController('viewStatsRow', {record:record}).getView()); 
    }); 
} 

Dans cet exemple, j'ai plus de travail en cours pour « construction » tous les éléments. Donc, pour éviter de bloquer le fil que j'utilise une liste comme une « file d'attente » et gère tout le premier élément - puis appeler la fonction avec la liste restante jusqu'à ce qu'il soit vide:

var work = []; 
function showNextItem(work,first){ 
    if(work && work.length > 0){ 
     // Progressively show list.... 
     if($.boastList && $.boastList.sections[0]){ 
      var list = []; 
      list.push(buildOneItem(work.shift())); // Take first element 
      if(first){ 
       $.boastList.sections[0].items = list; // Replace list 
      }else{ 
       $.boastList.sections[0].appendItems(list); // append item 
      } 
      // Free queue to allow other actions 
      setTimeout(function(){ 
       showNextItem(work); // Call recursively... 
      },30); 
     } 
    }else{ 
     // All boasts shown... 
    } 
} 

function showBoastlist(){ 
    work = []; 
    DataFactory.boasts.find({}, {$sort:{sortTime:-1}}, function(result){ 
     result.forEach(function(record) { 
      work.push(record); 
     }); 
    }); 
    showNextItem(work,true); 
} 

La fonction buildOneItem retourne juste un élément prêt à être ajouté à la vue.

Je ne sais pas si c'était ce que vous avez demandé - mais espérons que vous pouvez l'utiliser ;-)

Bonne programmation!

/John