在 ExtJS 中将 headers 添加到商店的代理一次

Adding headers to store's proxy once in ExtJS

我有一家商店,我需要向其代理添加一些 header。我不想使用 Ext.Ajax 单例的 defaultHeaders,因为它们只针对少数商店。

headers 使用键/值对,值来自一个变量,该变量在商店最初加载时未加载,该变量在成功登录后填充。

由于这个原因,我无法在代理或存储上使用构造函数,因为我用于 header 值的变量不可用。

我让它工作的唯一方法是使用商店的 beforeLoad。这真的是实现这一目标的最佳方式吗?

这是我商店中的监听器,我正在检查它是否未定义,因为它每次都会被触发。

listeners: {
    beforeload: function( store, operation, eOpts ) {
        if (this.proxy.headers === undefined) {
            this.proxy.headers = {
                'X-GType': CompA.Items.getGtype().get('type'),

有谁知道更好的方法吗?

似乎没有只触发一次的事件。

一般来说,如果在加载 'critical' 商店后创建视图会更好。这意味着您很可能需要在应用程序主文件中将 autoCreateViewport 设置为 false。然后在store中手动创建成功回调。挂钩 init() 方法来执行此操作。

示例:(伪代码)

App.js

init: function() {
            myImportantStore.load({
               success: function() {
                 // create your viewport
               }
           });
}

作为 "events only firing once" 问题的一般答案 - 您可以将侦听器配置为在一个事件后自动取消侦听。

listeners: { 'beforeload': { fn: function(...), single: true } }