Я использую пользовательские события для обработки привязки данных с помощью Titanium Appcelerator, используя событие RefreshComp для данного идентификатора объекта (уникального для всех объектов) и атрибута, передающего новое значение. Это новое значение может исходить от push-уведомления, отредактированного в приложении iphone объекта, который вы хотите распространить на все композиции и т. Д. *
Titanium.App.fireEvent(RefreshComp, {
refreshid : objectId + '-' + attribute,
value : newvalue
});
и
function registerEvent(objectId,attribute,eventHandler){
Titanium.App.addEventListener(RefreshComp, function(e) {
if((e.refreshid === (objectId + '-' + attribute))) {
eventHandler(comp, e.value);
}
});
}
и тогда ваша функция eventHandler может быть такой простой, как
function eventHandler(comp,newvalue){
comp.value = newvalue;
}
или более сложный (например, изменение фона и т. Д.)
Моя точка зрения заключается в том, что это приводит к тому, что комп привязывается к глобальному контексту, в результате чего объект не освобождается. Я попытался прикрепить пользовательское событие к самому компоненту, но оно не работает. В результате я получаю приложение, которое падает с
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x242424cf
поскольку привязка относится к компоненту, все еще находящемуся в памяти на стороне IOS, но затем, когда TiViewProxy.m вызывает родительскую функцию в _hasListeners, он не может найти родителя в памяти, который не имеет какого-либо связанного объекта, и родитель был удален из памяти
Я гуглил и смотрю на git rep в appcelerator, но такого примера нет.