Требовать представления и добавлять с помощью переменной (Appcelerator Alloy)

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

но здесь у меня есть контейнер представления в моем index.xml

<View id="containerDays" layout="vertical" height="Titanium.UI.SIZE">
    <Require id="requiredDay" src="NewDay"/>
</View>
<Label id="buttonAddDay"  class="button" >Adicionar outro dia</Label>

также на index.js у меня есть:

$.buttonAddDay.addEventListener("click", addNewDay);
function addNewDay () {
  var novoDia  = $.getView("NewDay");
  $.containerDays.add(novoDia);
}

также у меня есть вид здесь, в другой папке:

/app/views/NewDay.xml

и внутри этого представления находится простой ввод

<Alloy>
  <View class="containerNewDay" layout="vertical" height="Titanium.UI.SIZE">
    <TextField id="Day" >write a new day</TextField>
  </View>
</Alloy>

Итак, подводя итог всему,

  1. Я пытаюсь добавить свой $.containerNewDay в свой $.containerDay, но у меня ничего не получается с getView() или .open()

  2. Мне придется использовать все элементы текстового поля, чтобы отправить его на сервер, как я могу установить идентификаторы, но, к сожалению, я понятия не имею, как это сделать на appcelerator.


person Ricardo Gimenes Ferreira    schedule 13.07.2016    source источник


Ответы (2)


Что касается ответа выше, вы включаете метод .add из исходного блока кода? так и должно быть:

$.buttonAddDay.addEventListener("click", addNewDay);

function addNewDay () {
  var novoDia  = Alloy.createController("NewDay").getView();
  $.containerDays.add(novoDia);
}

или лучше, было бы:

function addNewDay () {
  $.containerDays.add(Alloy.createController("NewDay").getView());
}

так как это не оставляет указатель открытым для представления.

если вы хотите сделать его еще чище:

$.buttonAddDay.addEventListener("click",  function addNewDay () {
  $.containerDays.add(Alloy.createController("NewDay").getView());
});

или, если вы хотите придерживаться «чистого» способа Alloy, оставьте функцию addNewDay на месте и просто добавьте обработчик onClick="addNewDay" в XML кнопки.

Крайне важно помнить, что вам нужно, чтобы ваше содержащее представление ContainerDays имело макет горизонтальный, иначе ваши добавленные представления будут просто располагаться друг над другом.

person jasonkneen    schedule 15.07.2016
comment
ИТ решил мою проблему 1, вторую проблему получения значения каждого нового дня я до сих пор не знаю. - person Ricardo Gimenes Ferreira; 15.07.2016
comment
Относительно 2 — если вы хотите получить значение текстового поля, вы можете изменить функцию добавления, чтобы создать указатель на контроллер NewDay, а затем сохранить массив указателей на текстовые поля, чтобы вставить каждое текстовое поле в массив — в конце у вас будет массив, который вы можете перебирать - person jasonkneen; 18.07.2016
comment
Другой вариант для 2. - перебрать дочерние элементы $.containerDays, а затем получить первый дочерний элемент каждого результата (который будет текстовым полем). - person jasonkneen; 18.07.2016
comment
наконец, вы можете реализовать решение, которое использует событие размытия текстовых полей для хранения значения текстового поля где-то, где вы можете получить его при сохранении - есть различные варианты. - person jasonkneen; 18.07.2016

Сдача:

$.buttonAddDay.addEventListener("click", addNewDay);
    function addNewDay () {
      var novoDia  = $.getView("NewDay");
    }

To:

$.buttonAddDay.addEventListener("click", addNewDay);
function addNewDay () {
  var novoDia  = Alloy.createController("NewDay").getView();
}
person user6221601    schedule 14.07.2016
comment
привет, у меня это не сработало, я отредактировал свой пост и добавил строку в эту функцию function addNewDay () { var novoDia = Alloy.createController(NewDay).getView(); $.containerDays.add(novoDia); } - person Ricardo Gimenes Ferreira; 14.07.2016
comment
ничего не произошло и ошибки нет, внутри контейнера ($.containerDays) нет $.novodia.. - person Ricardo Gimenes Ferreira; 14.07.2016
comment
также я использую 5.1.2GA - person Ricardo Gimenes Ferreira; 14.07.2016