0

Aviarc 3.6.0にアップグレードした後、画面の1つに上記のエラーが表示されます。

エラーを発生させる画面の部分:

<custom:record-table bottom="40" width="100%" left="0" top="0" dataset="account-ds" class="list" name="accountlist-rc" >
    <column width="0" display-field="AccountName"  header="Accounts" field2="AccountCode"  allow-sort="n" />
</custom:record-table>

レコードテーブルウィジェットをカスタマイズして、各列(field2とfield3)に2つの追加フィールドを指定できるようにしたので、これが列のfield2の由来であることに注意してください。

4

1 に答える 1

1

レコードテーブルの各列に複数のフィールドを指定できるようにするために行われた変更を調査した後、次のようになりました(RecordTable.jsの更新メソッドの670行目から)。

var field = this._datasetRow.getFieldObject(column.attributes['display-field']);
var field2 = this._datasetRow.getFieldObject(column.attributes['field2']);
var field3 = this._datasetRow.getFieldObject(column.attributes['field3']);

var text = field.getValue();
var text2 = field2.getValue();
var text3 = field3.getValue();

画面の列指定(質問のコードスニペット)では、フィールド3属性に値が設定されていないためパーツ

var field3 = this._datasetRow.getFieldObject(column.attributes['field3']);

失敗してエラーをスローしていました。メソッドgetFieldObjectは、null /未定義の値にも対応できるほど賢いはずですが、常に値が渡されることを期待しています。

この問題を解決するために、コードは次のようにリファクタリングされました。

var field = this._datasetRow.getFieldObject(column.attributes['display-field']);
var text = field.getValue();
if (column.attributes['field2'] != null) {
    var field2 = this._datasetRow.getFieldObject(column.attributes['field2']);
    var text2 = field2.getValue(); 
}
if (column.attributes['field3'] != null) {
    var field3 = this._datasetRow.getFieldObject(column.attributes['field3']);
    var text3 = field3.getValue();
}

その後、ウィジェットコードのカスタム部分は、text2およびtext3属性の可能な未定義の値に対応する必要があります。

于 2012-09-24T00:48:03.010 に答える