首页 > 解决方案 > ExtJS - 将 Ajax 响应变量存储为全局

问题描述

我正在尝试将设置存储到全局变量中。

var settings= {};

function on_ready() {
    Ext.Ajax.request({
         url: baseURL,

         success: function(response) {
             settings = Ext.decode(response.responseText);
         },

         failure: function(response) {
             console.log('server-side failure with status code ' + response.status);
         }
    });
}

console.log(settings);

最后一行代码显示为空。我知道这是异步调用,因此它不起作用。但不知道解决办法。有没有办法我该怎么做?我需要在整个应用程序中使用这个˙settings˙ 变量。这就是为什么它必须是全球性的。

标签: javascriptextjs

解决方案


我们过去在应用程序启动之前使用的一种初始化设置的方法是对 html 文件使用服务器端模板。它什么也没做,只是简单地添加一个<script>块,并用像window['prefix_propname'] = 'propvalue';. 不是最优雅的方式,但效果很好。

但首先,如果你真的需要它是全球性的,我会重新考虑。很可能您可以简单地在主视图模型中使用设置(在主控制器的 init 上加载)的数据字段,然后根据需要通过其配置将设置的部分绑定到子级。然后,取决于设置值的逻辑将在孩子的配置更新/应用方法中,通过将设置作为参数之一的公式表示,或通过绑定(内部视图或控制器)表示。控制器内部的绑定是一个非常方便的功能,在我的使用中经常出现,它消除了必须处理异步加载的烦恼;例如:

// view controller
init: function() {
  var vm = this.getViewModel();
  vm.bind('{settings}', function(settings) {
    //do your thing here
  });
}

推荐阅读