2013-03-26 3 views
1

В структуре Alloy я хочу динамически добавлять представление, определенное в XML-файле, но не привязанное к какому-либо другому виду другому.К сожалению, ваше приложение перестало работать

Давайте рассмотрим следующий пример:

контейнера Я хочу, чтобы заполнить index.xml:

<ScrollableView id="scrollableBilan" showPagingControl="true"> 
</ScrollableView> 

Шаблона вида question.xml Я хочу создать экземпляр для каждого вида вдаваясь в ScrollableView:

<Alloy> 
    <Collection src="ReponsePossible"> 
    <View id="questionContainer" class="container"> 
     <Label id="questionText" /> 
     <Button id="buttonNextQuestion">Question suivante</Button> 
    </View> 
</Alloy> 

Наконец, index.js контроллера, вопрос является экземпляром коллекции:

for(var i=0; i<questions.length; i++){ 
     $.scrollableBilan.add(Alloy.createController('question', questions.at(i))); 
    } 

Это приводит к сбою приложения после следующего сообщения: «К сожалению, ваше приложение остановлено». Я уже получил эту ошибку, всегда при попытке добавить динамическое представление, используя Alloy.createController.

поведение нормально при создании представления с Ti.UI.createView, но я хочу использовать MVC ...

Любая помощь приветствуется!

ответ

3

Вы передаете его объект модели, вместо того, чтобы попытаться передать ему объект JSON как это:

for(var i=0; i<questions.length; i++){ 
    $.scrollableBilan.add(Alloy.createController('question', questions.at(i).toJSON())); 
} 

В качестве альтернативы вы можете просто сделать все это внутри файла XML с помощью Data Binding и атрибут dataCollection, положить что-то как это в вашем index.xml:

<Alloy> 
    <Collection src="questions"> 
    <ScrollableView id="scrollableBilan" showPagingControl="true" dataCollection="ReponsePossible"> 
     <View id="questionContainer" class="container"> 
      <Label id="questionText" text="{questionText}"/> 
      <Button id="buttonNextQuestion">Question suivante</Button> 
     </View> 
    </ScrollableView> 
</Alloy> 

поле questionText должно быть атрибуты вашей questions модели.

+0

Еще раз спасибо Josiah. Первое решение работает. Тем не менее, мне не нравится этот гибридный вид между созданием чистых титановых элементов и сплавом. Я предпочитаю второе решение, но эта функция привязки dataCollection будет доступна только в следующей версии Appcelerator SDK (https://jira.appcelerator.org/browse/ALOY-451). Я подожду до 15 апреля, чтобы реализовать его таким образом. – krakax

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