2014-12-16 3 views
0


Привет, я новичок в Titanium, и в моем проекте я перебираю некоторые данные JSON, которые служат для заголовков и контента на странице приложения. У меня есть эта функция:

Titanium - проблема с контентом и петлями

xhr.onload = function() { 
    try { 
    var myPages = JSON.parse(this.responseText); 

    for (var c=0;c<myPages.length;c++){ 
     var title = myPages[c].title; // page title 
     var content = myPages[c].content; // page content 


Я добавил свои страницы званий TableViewRow в качестве метки:

 var row = Ti.UI.createTableViewRow({hasChild:true,height:Ti.UI.SIZE,backgroundColor:bgcolor}); 

     // Create a vertical layout view to hold all the titles 
     var post_view = Ti.UI.createView({ 
      height: Ti.UI.SIZE, 
      layout:'vertical', 
      left:5, 
      etc.. 
     });   

     // Create article titles 
     var label_title = Ti.UI.createLabel({ 
      text:title, 
      left:5, 
      etc... 
     }); 

    // Add the article titles to the view 
    post_view.add(label_title); 

    // Add the vertical layout view to the row 
    row.add(post_view); 
    row.className = 'item'+c; 
    data[c] = row; 


Это все работает отлично, я получаю таблицу с названиями страниц в каждой строке, но когда пользователь нажимает заголовок, я хочу, чтобы приложение открыло новый вид/окно, чтобы отобразить содержимое соответствующих ng страница. Здесь начинается моя проблема!

Я добавил эту функцию, чтобы попытаться справиться с этой ситуацией:

// Add an event listener to the rows 
    row.addEventListener('click', function(){ 
     Titanium.API.info('row has been clicked'); 

     // Create view for article content 
     var articleView = Titanium.UI.createView({ 
      height: Ti.UI.SIZE, 
      layout:'vertical', 
      left:5, 
      etc.. 
     }); 

     var t = Ti.UI.iPhone.AnimationStyle.FLIP_FROM_LEFT; 
     win.animate({view:articleView,transition:t}); 

     var articleViewContent = Ti.UI.createLabel({ 
      text:content, 
      left:5, 
      etc.. 
     }); 

     // Add the content to the view 
     articleView.add(articleViewContent); 

    }); 
    } 

    // Create the tableView and add it to the window. 
    var tableview = Titanium.UI.createTableView({data:data,minRowHeight:58}); 
    win.add(tableview); 

    } 
    catch(E){ 
     alert(E); 
    } 
}; 


я могу получить ответ на ввод названия Нажмите, чтобы показать в консоли, но я не могу понять, как вызовите соответствующий контент в новом представлении. Я думаю, что счетчик должен иметь это хранилище (с момента создания названий), но не знаю, как получить к нему доступ.

Я немного потерялся и чувствую, что я могу испортить некоторые из основ. Я относительно новичок в JavaScript, поэтому, пожалуйста, извините за любые ошибки! Было бы здорово получить некоторые советы, которые помогут мне улучшить!

(я добавил «и т.п ..» в коде, чтобы сократить вещи)

ответ

1

Сначала нужно добавить какой-то content атрибутом самой строки для того, чтобы позже получить к нему доступ через события ряд клик. Настройте определение строки следующим образом:

var row = Ti.UI.createTableViewRow({ 
    content: content, // contains the article content from myPages[c].content 
    hasChild:true, 
    height:Ti.UI.SIZE, 
    backgroundColor:bgcolor 
}); 

Затем вам нужно передать событие в функцию обратного вызова в слушателя событий для строки:

row.addEventListener('click', function(ev){ 

    Titanium.API.info('row has been clicked:'+JSON.stringify(ev)); // this will allow you to see the event's properties 

    ... 

    // you can access the content attribute of the row by using ev.row.content 
    var articleViewContent = Ti.UI.createLabel({ 
     text:ev.row.content, 
     left:5, 
     etc.. 
    }); 
} 
+0

Это работало отлично, спасибо за вашу помощь Ed. Я рад, что не был слишком * слишком далеко! Я также не был на 100% уверен, должен ли я иметь функцию row.addEventListener внутри цикла, но все это, кажется, работает хорошо. – niallobr

+0

@niallobr - без проблем, рад помочь. Обратите внимание, что объект события может быть немного похож на Android. Я никогда не мог найти хорошую документацию относительно того, как структурированы все объекты событий. Мне всегда приходится проверять его с помощью 'Ti.API.info', чтобы узнать, как получить доступ к тому, что мне нужно от него. –

Смежные вопросы