我目前正在开发一个具有brand_field_id
参数之一的应用程序。它将保存“品牌”的自定义票证字段 ID。问题是:它不是必需的,因为用户可能想要或不使用它提供的功能。预期行为:
- 如果此字段填充了 ID,
.change
则将在自定义字段上添加它的事件侦听器(并且事情将完成); - 如果将其留空,则不会发生任何事情。这意味着用户选择不使用它。
Zendesk 已经为自定义工单字段更改事件提供了完美的监听器,它的工作方式如下(动态使用brand_field_id
):
events: {
"ticket.custom_field_ticket.custom_field_{{brand_field_id}}.changed": "myCustomFieldChangedFunction"
}
... aaand 如果应用程序在为空时没有崩溃,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);
}
},
它太宽泛了,每当票证上的任何字段发生变化时都会触发。我想找到一个更好、更干净、更优雅的解决方案。