[英]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.