0

我正在使用 Extjs 2.2.1 和 Alfresco 3.2 企业版。

我想更新在登录期间已加载的组件上处理对 alfresco 服务器的身份验证的票证。这张票在设定的时间后过期,这就是我需要更新票的原因。

对我来说似乎不可行的选项(但如果我错了请告诉我):

  1. 重新加载组件以重新加载调用参数 - 我不能这样做,因为它会重置用户之前正在处理的任何内容(即重新加载树面板,重置网格过滤器等)。实际网页永远不会重新加载,因为一切都使用 ajax 调用来更新页面上的内容。

  2. 创建一个全局变量来存储票证并将其作为调用参数附加到任何 ajax 调用 - 登录期间加载的任何组件仍将使用原始票证来调用服务器。

4

1 回答 1

0

尝试这样的事情

Ext.onReady(function() {
  var token = new Ext.util.MixedCollection();
  token.add('id', 'THE_TOKEN_ID');
  Ext.ComponentMgr.register('token', token);
});

将事件侦听器附加到MixedCollection更新任何关心令牌的组件。

// now you need all the event listeners
var token = Ext.getCmp('token');
var component = Ext.getCmp('some_component_that_needs_ajax');
token.on('replace', function(key, value, original) {
  if(key == 'id') {
    component.params.token_id = value; // update the new value
  }
});

每当令牌需要更新时,请执行

var token = Ext.getCmp('token');
token.replace('id', 'THE_NEW_TOKEN_ID');

这里发生的事情是:

  1. 您创建一个MixedCollection以包含有关您的令牌的信息。
  2. 当有新令牌时需要更新的任何组件都应在replace令牌侦听器的处理程序中更新MixedCollection
  3. 当您获得新的令牌 ID 时,使用新的令牌 IDMixedCollection.replace更新id密钥。
  4. 处理程序将replace触发,并且更新所有依赖组件的侦听器。
于 2010-07-12T04:49:11.517 回答