在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
事件,并且仅提取最新值。因此,变量existingTokens
和oAddedTokens
具有相同的值。
我的问题是如何在触发更改事件之前获取控件中的所有令牌。
答案 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.
}
}