В настоящее время я работаю над приложением, одним из параметров которого является brand_field_id
. Он будет содержать идентификатор пользовательского поля заявки для «Бренд». Дело в том, что он не требуется, поскольку пользователь может захотеть или не использовать предоставляемые им функции. Ожидаемое поведение:
- Если это поле заполнено идентификатором, прослушиватель событий для его
.change
будет добавлен в настраиваемое поле (и все будет сделано); - Если оставить пустым, ничего не должно произойти. Это означает, что пользователь решил не использовать его.
Zendesk уже предоставляет идеальное средство прослушивания для изменения пользовательского поля заявки. событие, которое работает следующим образом (динамически используя brand_field_id
):
events: {
"ticket.custom_field_ticket.custom_field_{{brand_field_id}}.changed": "myCustomFieldChangedFunction"
}
... и было бы действительно здорово, если бы приложение не аварийно завершало работу, когда brand_field_id
пусто.
Поскольку я не хочу, чтобы приложение зависало, если brand_field_id
оставить пустым, я решил проверить его перед добавлением прослушивателя событий, но не смог этого сделать. Я пробовал несколько вариантов следующего кода в событии app.created
, но все безуспешно.
if(!_.isEmpty(this.setting('brand_field_id'))){
console.log('Brand change event added');
this.events['ticket.custom_field_ticket.custom_field_{{brand_field_id}}.changed'] = 'brandChangedHandler';
}
console.log
увольняют, так что валидация прошла успешно. К сожалению, событие никогда не срабатывает для настраиваемого поля.
Итак, мой вопрос: как я могу добавить прослушиватель событий на ходу? Или есть другой способ добиться того, что мне нужно?
Я даже сообщил об этом в сообществе Zendesk в аналогичной теме, но пока нет ответов. обходной путь, который я там нашел, на самом деле работает, но мне он не очень нравится:
events: {
// [...]
'*.changed': 'anyFieldChangedHandler'
},
// [...]
anyFieldChangedHandler: function(e){
// If the changed field was {brand_field_id}
if(!_.isEmpty(this.setting('brand_field_id')) && e.propertyName === 'ticket.custom_field_'+ this.setting('brand_field_id')){
this.brandChangedHandler(e);
}
},
Оно слишком широкое и срабатывает при изменении любого поля в заявке. Я хотел бы найти лучшее, чистое и элегантное решение.
this.$(‘.some-element-in-app’).on(‘click’, function() { /* do some thing. */ })
, заменив элемент на нужный вам элемент? - person Jimmy Long   schedule 19.07.2015