2012-10-07 4 views
2

Je travaille sur un widget. Il n'utilise aucun service Web pour la source de données. J'analyse certaines données à l'aide de jQuery à partir d'une page Web normale et je souhaite afficher ces données sous forme de liste de codes de dash. J'ai suivi l'exemple de code listDataSource dans Dashcode. Dans l'inspecteur d'attributs, j'ai sélectionné le type de données dynamique et j'ai choisi cette source de données comme source de données. Puis, j'ajouter un article à _rowData de listDataSource cette façon:dashcode: comment ajouter/supprimer des éléments dans la liste? La liste ne se régénère pas visuellement

listDataSource._rowData.push("New Item 4"); 

et recharger ma liste de cette façon:

var mylist = document.getElementById("list").object;  
mylist.reloadData(); 

Je sais, que les fonctions numberOfRows et prepareRow est appelé après que j'Ajouter un nouvel élément , (par des messages d'alerte). Alert imprime _rowData avec un nouvel élément ajouté comme prévu. Mais une liste dans mon widget ne rafraîchit pas! Pourquoi? Je ne peux vraiment pas le comprendre. Y at-il une fonction reloadUI() ou quelque chose? S'il vous plaît, mettez-moi sur le chemin si vous maintenant la solution à mon problème. Merci!

Répondre

0

Trouvé un hack laid par moi-même. si reloadData() est appelé deux fois - liste dans l'interface utilisateur actualise comme prévu.

Une autre solution consiste à utiliser var global et le mettre juste avant reloadData()

var myData['Item 1', 'Item 2', 'Item 3']; 

var listDataSource = { 
    _rowData: myData, 
    numberOfRows: function() { 
    alert("Row data now is: "+this._rowData); 
    alert("number of rows: "+this._rowData.length); 
    return this._rowData.length; 
}, 
prepareRow: function(rowElement, rowIndex, templateElements) { 
if (templateElements.rowLabel) { 
    templateElements.rowLabel.innerText = this._rowData[rowIndex]; 
} 
rowElement.ondblclick = function(event) { 
    // Do something interesting 
    alert("Row "+rowIndex); 
}; 
} 
}; 

puis

myData.push("Item 4"); 

et définir le nouveau tableau de données à la liste, puis recharger:

var mylist = document.getElementById("list").object;  
mylist.setDataArray(myData); 
mylist.reloadData(); 

mais cette solution désactive la fonction de rappel sur rowElement

alert("Row "+rowIndex); 

ne fonctionne pas après la mise en tableauDonnees nouvelle, donc je choisis à double reloadData pirater:

var mylist = document.getElementById("list").object;  
mylist.reloadData(); 
mylist.reloadData(); 
Questions connexes