2013-09-26 4 views
1

Я новичок в Titanium и создаю свое фиктивное приложение для iPhone. Я использовал этот код из учебника. Но я застрял в «itemSelected» eventListener, похоже, не работает здесь. Я попытался добавить кнопки, метки и их клики, даже если они не работают. Я не ошибаюсь. Итак, пожалуйста, совет. Спасибо заранее.Titanium EventListener не работает

Моего ApplicationWindow.js есть ..

//Application Window Component Constructor 

function ApplicationWindow() { 
//declare module dependencies 
var MasterView = require('ui/listView_common/MasterView'), 
    DetailView = require('ui/listView_common/DetailView'); 

//create object instance 
var self = Ti.UI.createWindow({ 
    backgroundColor:'#fff' 
}); 

//construct UI 
var masterView = new MasterView(), 
    detailView = new DetailView(); 

//create master view container 
var masterContainerWindow = Ti.UI.createWindow({title:'List View'}); 
masterContainerWindow.add(masterView); 

//create detail view container 
var detailContainerWindow = Ti.UI.createWindow({left:100,title:'Detail View'}); 
detailContainerWindow.add(detailView); 

//create iOS specific NavGroup UI 
var navGroup = Ti.UI.iPhone.createNavigationGroup({ 
    window:masterContainerWindow 
}); 
self.add(navGroup); 

//add behavior for master view 
masterView.addEventListener('itemSelected', function(e) { 
    alert("Alert"); 
    navGroup.open(detailContainerWindow); 
    detailView.showArticle(e.link); 
}); 

function refreshData() { 
    var file = Ti.Filesystem.getFile(Titanium.Filesystem.resourcesDirectory+'jsonFiles/data.json'); 
    var data = file.read().text; 
    var json = JSON.parse(data); 
    masterView.refreshDataTable(json); 
} 

// load data 
refreshData(); 

return self; 
}; 
module.exports = ApplicationWindow; 

и мой 'MasterView.js' есть ..

var createRow = function(item) { 

var tablerow = Ti.UI.createTableViewRow({ 
    height: 90, 
    link: item.link, 
    className: 'itemRow', 
    hasChild: true 
}); 
var imageview = Ti.UI.createImageView({ 
    image: item.image, 
    height: 55, 
    width: 68, 
    left: 5, 
    top: 3 
}); 
var titleview = Ti.UI.createLabel({ 
    text: item.title, 
    color: '#000', 
    font: { 
     fontSize: 16 
    }, 
    left: 83, 
    right: 5, 
    top:5, 
    width:300 
}); 
var dateview = Ti.UI.createLabel({ 
    text: item.pubDate, 
    textAlign: 'center', 
    color: '#444', 
    font: { 
     fontSize: 12  
    }, 
    height: 'auto', 
    width: 68, 
    left: 5, 
    top: 60 
}); 
var nameview = Ti.UI.createLabel({ 
    text: item.firstName +" " + item.lastName, 
    color: '#000', 
    font: { 
     fontSize: 14 
    }, 
    left: 83, 
    right: 5, 
    top:30 
}); 
var descriptionview = Ti.UI.createLabel({ 
    text: item.description, 
    color: '#000', 
    font: { 
     fontSize: 12 
    }, 
    left: 83, 
    top:50 
}); 
tablerow.add(imageview); 
tablerow.add(dateview); 
tablerow.add(titleview); 
tablerow.add(nameview); 
tablerow.add(descriptionview); 

return tablerow; 
}; 

//Master View Component Constructor 
function MasterView() { 
var self = Ti.UI.createView({ 
    backgroundColor:'#fff' 
}); 

var table = Ti.UI.createTableView(); 
self.add(table); 
table.addEventListener('click', function(e) { 
    self.fireEvent('itemSelected', { link: e.row.link }); 
}); 

self.refreshDataTable = function(data) { 
    if (Object.prototype.toString.apply(data) === '[object Array]') { 
     var rows = []; 
     for (var i = 0; i < data.length; i++) { 
      rows.push(createRow(data[i])); 
     } 
     table.setData(rows); 
    } 
}; 

return self; 
} 

module.exports = MasterView; 

DetailView.js

//Detail View Component Constructor 
function DetailView() { 
var self = Ti.UI.createView(); 
var webview = Ti.UI.createWebView(); 
self.add(webview); 

self.showArticle = function(url) { 
    webview.url = url; 
}; 

webview.addEventListener('load', function(e) { 
    self.fireEvent('articleLoaded'); 
}); 

return self; 
} 
module.exports = DetailView; 
+0

В моей функции ApplicationWindow, я попробовал этот код http://docs.appcelerator.com/titanium/3.0/#!/api/Titanium.UI.iPhone.NavigationGroup , по-прежнему не работает. – Avin

+0

Не могли бы вы добавить, где и как происходит событие itemSelected? – mwfire

+0

Хммм ... работает 'table.addEventListener ('click')'? Если вы помещаете предупреждение внутри функции, оно отображается? – mwfire

ответ

0

Попробуйте использовать Titanium.App.addEventListener в ваш код следующим образом:

//add behavior for master view 
    Ti.App.addEventListener('itemSelected', function(e) { 
    alert("Alert"); 
    navGroup.open(detailContainerWindow); 
    detailView.showArticle(e.link); 
    }); 

и огонь событие, как

table.addEventListener('click', function(e) { 
    Ti.App.fireEvent('itemSelected', { link: e.row.link }); 
}); 

это будет делать трюк

Вы можете также обратиться what is fireevent how do i use it

1

itemSelected не тип события окна. Вот почему он не работает. Попробуйте событие click и получите apiName и выполните свою работу на основе apiName.

Пример:

windowNAme.addEventListener('click',function(e){ 
    //when we click on button then we get id from this 
    getId=e.source.id; 
    if(getId=="mybutton") 
    { 
     perform your action here; 
    } 
}) 
Смежные вопросы