さて、私は最近、exports.BaseController を使用して Alloy コントローラーの関数を継承し、(必要に応じて) オーバーライドする方法を発見しました。これで、行が動的に生成されるテーブルを含むビュー ページができました。以下は、xml ビュー ファイルと関連するコントローラー ファイル (その一部) です。
parentView.xml
<Alloy>
<Window id="currentWin">
<LeftNavButton>
<Button id="backBtn" onClick="goBack"/>
</LeftNavButton>
<TitleControl>
<Label id="titleLabel"/>
</TitleControl>
<TableView id="menuTable"/>
</Window>
</Alloy>
parentView.js
var dataArray = [];
var generateRows = function(){
//code to create a number of TableViewRow instances and push them into dataArray
};
exports.generateRows = generateRows;
generateRows(); //problem area
$.menuTable.setData(dataArray);
ここで、上記の genrateRows 関数を継承し、その機能をオーバーライドするために使用しているコントローラーを次に示します。
childView.js
exports.baseController = "parentView";
var generateMyRows = function() {
//code to create a number of TableViewRow instances and push them into dataArray
};
exports.generateRows = generateMyRows;
childView.js で exports.baseController を使用してオーバーライドすることについての私の理解は、generateRows()
呼び出し (問題領域) が行わgenerateMyRows()
れると、childView.js のメソッドが呼び出されるということです。しかし、そうではありません。tableview はgenerateRows()
、parentView.js の関数によってまだ取り込まれています。私を助けてください、私はこれについて何時間も頭を悩ませてきました!