如何在触发tokenChange事件时检索MultiInput控件中的先前令牌?

时间:2016-06-05 13:16:59

标签: javascript sapui5

在MultiInput控件中,当新标记添加到控件中时,旧标记将被刷新。

如果添加了新的令牌,如何在触发attachTokenChange事件时获取以前的令牌。

这是我迄今为止的努力:

         var oFilter = oSmartFilterBar.getControlByKey("Filter");
         // Trying to get the current tokens when the control has focus
         oFilter.attachBrowserEvent("onfocus", function(oEvent)
         {
                oFilter._tempTokens = oFilter.getTokens();
         });
         oFilter.attachTokenChange(function(oEvent)
         {  
            var existingTokens = oFilter.getTokens();
            var oAddedTokens   = oEvent.getParameters("addedTokens").token;
         } 
    });

不会触发focus事件,并且每次有令牌更改时都会触发attachTokenChange事件,并且仅提取最新值。因此,变量existingTokensoAddedTokens具有相同的值。

我的问题是如何在触发更改事件之前获取控件中的所有令牌

1 个答案:

答案 0 :(得分:0)

您应该能够重建令牌聚合的先前内容:old = new - added + removed。

tokenChange event参数告诉您已添加哪些令牌以及已删除哪些令牌。您必须考虑类型参数。

plunker上的示例:

  onTokenChange: function(oEvent){
    var newCollection = oEvent.getSource().getTokens();
    var parameters = oEvent.getParameters();
    if(parameters.type==="tokensChanged"){
      //You can ignore the added, removed and removeAll type events
      // as tokensChanged is always fired.
      var oldCollection = newCollection.filter(function(t){return parameters.addedTokens.indexOf(t)<0});
      Array.prototype.push.apply(oldCollection,parameters.removedTokens);
      //oldCollection: here you are. 
    }
  }