Titanium Mobile: ссылки на элементы интерфейса с идентификатором? - PullRequest
0 голосов
/ 27 апреля 2011

Как вы отслеживаете свои элементы пользовательского интерфейса в Titanium? Скажем, у вас есть окно с TableView, в котором есть некоторые переключатели (вкл / выкл), и вы хотите сослаться на измененный переключатель onchange с помощью общего прослушивателя событий. Есть свойство event.source, но вы до сих пор не знаете, какое поле формы было просто переключено, у вас просто есть ссылка на элемент. Есть ли способ присвоить элементу идентификатор, как если бы вы использовали радиокнопку в JavaScript?

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

Ответы [ 5 ]

1 голос
/ 16 февраля 2012

Идентификатор модуля только для удержания его ID. Когда у нас есть ID использования, вызов любого другого пространства просто использовать. и использовать легко. Попробуйте это

var but1 = Ti.Ui.createButton({title : 'Button', id:"1"});

window.addEventListener('click', function(e){
   var obj = e.source; 
   if ( obj.id == "1" ) {
      // do some magic!!
   }
});
window.add(but1);

Я думаю, это поддерживается для вас.

1 голос
/ 29 апреля 2011

просто присвойте элементу id и ... все эти другие решения МОГУТ работать, но они, похоже, не годятся для того, что вы просите.

// create switch with id
var switcher0 = Ti.Ui.createSwitch({id:"switch1"});

затем внутри слушателя событий

myform.addEventListener('click', function(e){
   var obj = e.source; 
   if ( obj.id == "switch1" ) {
      // do some magic!!
   }
});
1 голос
/ 27 апреля 2011

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

var switches = [];
function createSwitch(i) {
    switches[i] = Ti.UI.createSwitch();
    switches[i].addEventListener('change', function(e) {
        Ti.API.info('switch '+i+' = '+e.value);
    });
    return switches[i];
}

for(i=0;i<rows.length;i++) {
    row = Ti.UI.createTableViewRow();
    row.add(createSwitch(i));   
}

Однако имейте в виду, что это решение может не соответствовать вашим потребностям, так же как и моим. Для меня это было хорошо, потому что каждый раз, когда я создавал коммутатор, он динамически добавлял к нему слушателя, тогда я мог просто заставить e.source.parent коммутатора взаимодействовать с тем, что мне нужно.

1 голос
/ 27 апреля 2011

Простым решением является использование инфраструктуры, которая помогает вам отслеживать все ваши элементы, что значительно ускоряет разработку по мере роста проекта и приложения.Я создал собственный фреймворк Adamantium.js , который позволяет вам использовать синтаксис, такой как jQuery, для работы с вашими элементами на основе идентификатора и селекторов типа .В следующем выпуске он также будет поддерживать что-то вроде классов, которые могут быть произвольно добавлены или удалены из элемента, отслеживание отношений master / slave и основные методы фильтрации, чтобы помочь вам сузить ваш запрос.Большинство методов являются цепочечными, поэтому создание приложений с широкими возможностями взаимодействия происходит быстро и просто.

Небольшая демонстрация:

// Type selector, selects all switches
$(':Switch')

// Bind a callback to the change event on all switches
// This callback is also inherited by all new switch elements
$(':Switch').bind('change', function (e) {
    alert(e.type + ' fired on ' + e.source.id + ', value = ' + e.value);
});

// Select by ID and trigger an event
$('#MyCustomSwitch').trigger('change', {
    foo: 'bar'
});

Затем в фреймворке есть много других интересных методов, которые всеразработанный для ускорения разработки и смоделированный по привычным способам jQuery, подробнее об этом в оригинальном сообщении в блоге .

0 голосов
/ 27 апреля 2011

как вы создаете свой просмотр таблицы и свой переключатель?обычно я определяю функцию eventListener при создании переключателя.

// first switch
var switcher0 = Ti.Ui.createSwitch();
switch0.addEventListener('change',function(e){});
myTableViewRow.add(switch0);
myTableView.add(myTableViewRow);

// second switch
var switch1 = .. 

, поэтому не требуется универсальный обработчик событий.

...