Javascript Zendesk应用程序:如何在应用程序初始化后创建事件侦听器?

Javascript Zendesk应用程序:如何在应用程序初始化后创建事件侦听器?,javascript,events,frameworks,zendesk,Javascript,Events,Frameworks,Zendesk,我目前正在开发一款应用程序,它的一个参数是brand_field_id。它将保存品牌的自定义票证字段ID。问题是:它不是必需的,因为用户可能希望或不想使用它提供的功能。预期行为: 如果此字段中填充了ID,则会在自定义字段中添加一个事件侦听器。更改将完成; 如果留空,则不会发生任何事情。这意味着用户选择不使用它。 Zendesk已经为提供了完美的侦听器,它使用brand_field_id动态工作如下: 。。。aa如果当brand_field_id为空时应用程序没有崩溃,那就太棒了 因为如果bran

我目前正在开发一款应用程序,它的一个参数是brand_field_id。它将保存品牌的自定义票证字段ID。问题是:它不是必需的,因为用户可能希望或不想使用它提供的功能。预期行为:

如果此字段中填充了ID,则会在自定义字段中添加一个事件侦听器。更改将完成; 如果留空,则不会发生任何事情。这意味着用户选择不使用它。 Zendesk已经为提供了完美的侦听器,它使用brand_field_id动态工作如下:

。。。aa如果当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,因此验证正常。不幸的是,该事件从未为自定义字段触发

所以我的问题是:如何在移动中添加事件侦听器?还是有其他方法来实现我所需要的

我甚至有过类似的经历,但到目前为止还没有答案。我在那里发现的解决方法确实有效,但我不太喜欢:

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);
  }
},

它太宽了,只要车票上的任何字段发生变化,它就会开火。我想找到一个更好、更干净、更优雅的解决方案。

我意识到要找到与Zendesk应用程序框架相关的答案是多么困难,我也有同感

我会这样做

events: {
  "ticket.custom_field_ticket.custom_field_{{brand_field_id}}.changed":"itChanged"
},
itChanged: function(){
      if(ticket.custom_field_ticket.custom_field_{{brand_field_id}} !== null && ticket.custom_field_ticket.custom_field_{{brand_field_id}} !== undefined){
          //Your custom field exists and has a value. Do something with it.
      }
      else{
          //Your custom field does not exist and/or does not have a value. do nothing
      }
}
您的应用程序是否需要此功能?我不确定这是否具有与!相同的功能。我很饿,但你可以试试看。我在我的应用程序中经常使用它,有时只是作为一个安全防护,以防我的应用程序加载速度快于实际票证,这会导致在应用程序加载时一些值未定义


希望这能有所帮助

谢谢你的回复,确实有时候很难找到你需要的东西。无论如何,我看到你的代码有两个问题:1注册票证。自定义字段票证。自定义字段票证。{{brand\u field\u id}。作为事件更改是问题的一部分:它抛出JS错误:未捕获错误:语法错误,无法识别的表达式:{{brand\u field\u id}。更改。2在'itChanged'函数中,ticket.custom_field_ticket.custom_field{{{brand_field_id}}不求值,甚至不是有效的JS语法。表达式作为事件侦听器进行计算,因为de framework解析字符串。关于上面的问题1,我的意思是,如果字段为空,则会抛出错误。您好,Michael,您可以简单地使用jQuery绑定一个新的事件侦听器,如下所示-this.$'.app中的某个元素''on'click',函数{/*做点什么。*/},用所需的元素替换元素?
events: {
  "ticket.custom_field_ticket.custom_field_{{brand_field_id}}.changed":"itChanged"
},
itChanged: function(){
      if(ticket.custom_field_ticket.custom_field_{{brand_field_id}} !== null && ticket.custom_field_ticket.custom_field_{{brand_field_id}} !== undefined){
          //Your custom field exists and has a value. Do something with it.
      }
      else{
          //Your custom field does not exist and/or does not have a value. do nothing
      }
}