[英]dashcode: how to add/remove items in list? List does not refresh visually
我正在處理一些小部件。 它不使用任何Web服務作為數據源。 我使用普通網頁上的jQuery解析一些數據,並希望將這些數據顯示為破折號列表。 我遵循了Dashcode中的listDataSource示例代碼。
var listDataSource = {
_rowData: ['Item 1', 'Item 2', 'Item 3'],
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);
};
}
};
在屬性檢查器中,我選擇了“動態數據類型”,然后選擇此listDataSource作為數據源。 然后,我通過以下方式將另一個項目添加到listDataSource的_rowData中:
listDataSource._rowData.push("New Item 4");
並以這種方式重新加載我的列表:
var mylist = document.getElementById("list").object;
mylist.reloadData();
我知道,在我添加新項之后(通過警報消息)將調用numberOfRows和prepareRow函數。 警報將打印_rowData並按預期添加新項目。 但是我的窗口小部件中的列表不會刷新! 為什么? 我真的不知道。 是否有一些功能reloadUI()或其他? 請,如果您現在解決我的問題,請把我放在路上。 謝謝!
自己發現了一個丑陋的駭客。 如果兩次調用reloadData()-UI中的列表將按預期刷新。
另一種解決方案是使用全局var並將其設置在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);
};
}
};
然后
myData.push("Item 4");
並設置新的數據數組以列出並重新加載它:
var mylist = document.getElementById("list").object;
mylist.setDataArray(myData);
mylist.reloadData();
但是此解決方案禁用rowElement上的回調函數
alert("Row "+rowIndex);
設置新的dataArray后無法正常工作,因此我選擇double reloadData hack:
var mylist = document.getElementById("list").object;
mylist.reloadData();
mylist.reloadData();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.