2015-03-03 4 views
0

в мобильном проекте приложения Titanium Alloy:ListView не показывает все ListItems

var apptList = Ti.UI.createListView(); 
var calendar = Ti.UI.createListSection({ headerTitle: 'Appointments'}); 
var appts = []; 
var apptsData = []; 

.....

//format: null, Startdate, Enddate, Location, AppoinmentID (repeats) 
apptsData = parseDates(this.responseText); 
Ti.API.info(apptsData.toString()); 

Моя parseDates функция возвращает эти значения в виде массива, ниже меня Отображается указатель toString. (Это нормально, что они не все даты)

,2013-09-30T00:00:00Z,2013-09-30T00:13:00Z,Dayton Ohio,1,,2015-10-05T00:00:00Z,2015-10-30T00:13:00Z,New York,2,,1992-10-07T00:00:00Z,1992-10-07T00:13:00Z,Demoines,3,,2013-09-30T00:00:00Z,2013-09-30T00:13:00Z,Bellbrook Ohio,4, 

По какой-то причине я не может получить эти значения, чтобы показать в моей ListView. Я даже не могу получить доступ к какой-либо части массива за пределами этих значений.

Кроме того, приращение определенных значений приводит к сбою моего приложения (нет сообщения об ошибке), а некоторые нет (например, i + = 5 сбоев, i + = 6 - нет), как если бы я обращался к данным, которых нет или некоторые другие проблемы с памятью.

  for(var i = 0; i <= 20; i += 5){ 
      //skips null 
      Ti.API.info(apptsData[i + 1]); 
      appts.push({properties: {title: apptsData[i + 1]}}); //Start Date 
      Ti.API.info(apptsData[i + 2]); 
      appts.push({properties: {title: apptsData[i + 2]}}); //End Date 
      Ti.API.info(apptsData[i + 3]); 
      appts.push({properties: {title: apptsData[i + 3]}}); //Location 

     } 

Первый цикл будет толкать & печать (одни и те же значения отображаются в моем ListView):

[INFO] : 2013-09-30T00:00:00Z 
[INFO] : 2013-09-30T00:13:00Z 
[INFO] : Dayton Ohio 

Но после того, что я просто получить аннулирует.

 Ti.API.info("length: " + apptsData.length); 

Длина возвращается 6, в то время как она должна быть выше.

Ниже я пытаюсь добавить/раздел ListView к моему окну

 var calendar = Ti.UI.createListSection({ items: appts }); 
     apptList.sections = [calendar]; 
     $.calendarWindow.add(apptList); 
+0

Пройдите через приложение, используя отладчик, продолжайте проверять значение apptsData при его прохождении. Я знаю, что некоторым нравится зависеть от Ti.API.info для отладки. Вероятно, здесь недостаточно исходного кода для определения проблемы. Я знаю, что на некоторых проектах сложно дать только правильное количество кода, но когда все это рубит так, вы не можете действительно определить, где это пошло не так. – Martin

+0

Да, я пытался это сделать. По какой-то причине мой отладчик прикручен (не отображает значения переменных и не останавливается на контрольных точках). Но я полагаю, что это совершенно другая проблема. Если я исправлю это и решит свою проблему, я обязательно опубликую обновление. – starlord7

ответ

0

Если apptsData.length (сразу после того, когда он возвращается из parseDates()) дает 6 вместо номера вы ожидаете, то ясно, что есть что-то неправильно с this.responseText или parseDates(), и проблема не связана с ListView.

Используйте console.info(JSON.stringify(apptsData, null, ' ')), чтобы получить лучшее представление о массиве или, как говорит Мартин, пройти и проверить значение.

0

ОК, решение немного глупее, чем хотелось бы.

По существу, что происходит в моей функции parseDates Я рекурсивно добавлял массивы, чтобы получить всю необходимую мне информацию. К сожалению, я использовал Array.push (otherarray) вместо Array.concat (otherarray)

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

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