2

私はいくつかのウィジェットに取り組んでいます。データソースにWebサービスを使用しません。通常の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にもう1つのアイテムを追加します。

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

この方法でリストをリロードします。

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

新しいアイテムを追加した後(アラートメッセージによって)、関数numberOfRowsとprepareRowが呼び出されることはわかっています。Alertは、期待どおりに新しいアイテムが追加された_rowDataを出力します。しかし、私のウィジェットのリストは更新されません!なんで?私は本当にそれを理解することはできません。関数reloadUI()などはありますか?あなたが私の問題の解決策になったら、私を途中に置いてください。ありがとう!

4

1 に答える 1

0

自分で醜いハックを見つけました。reloadData() が 2 回呼び出された場合 - UI のリストが期待どおりに更新されます。

別の解決策は、グローバル変数を使用して 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 を設定した後は機能しないため、2 つの reloadData ハックを選択します。

var mylist = document.getElementById("list").object;    
mylist.reloadData();
mylist.reloadData();
于 2012-10-07T22:11:36.567 に答える