2012年5月21日 星期一

titanium, tableview rowdata.click找不到e.rowData.xxxx資料

在titanium中
tableview下,同一段click事件中iPhone找得到row data.xxx資料,可是android不行..

tableview.addEventListener('click', function(e) {
                if(!e.rowData.xxxx) {
                        alert('no ios markerid');
                        return;
                }

這個問題非常古怪,古怪到我差點和夥伴翻臉討論是否要放棄titanium框架
不過解法異常簡單..
主要是塞row.xxxx的時機
使用以下方式設定資料即可
var row=Ti.ui.createtableviewrow({
xxx: 123,
yyy : 456
});
千萬別用
var row = Ti.ui.ceatetableviewrow({

});
row.xxx=123;
row.yyy=456;
這種用法在iphone正常
但是android(至少是google pai 2.2)下會有隨機性的資料遺失問題發生

2012/5/26 上午11:13更新
以上使用方法是正確的
不過當row是放在section中時
section1.add(row)

在android中,table.click事件
使用e.rowData會抓不到資料
目前確定這種情況下使用 e.row.xxx可以抓到資料
e.row在其他地方的適用性尚未測試

2 則留言:

Unknown 提到...

在 Android TableViewRow 裡面的 classname 設成一樣 TableView 就會無法取出 e.index 的值,如果設成不一樣就可以正常取出,我想應該是Titanium的bug

愛迪生。吳 提到...

是的,我也覺得是當時 SDK 的 Bug
不過我當時已經見怪不怪了
也許是 Android 環境使然
Titanium 在 Android 上實作時
很多問題都需要找到特殊方法解決
不過 Titanium 持續有在改進(雖然 Android 也一直在改變..)
這問題我不確定是否還存在