簡體   English   中英

dashcode:如何添加/刪除列表中的項目? 列表無法直觀刷新

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM