javascript - 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˙ 变量。这就是为什么它必须是全球性的。
解决方案
我们过去在应用程序启动之前使用的一种初始化设置的方法是对 html 文件使用服务器端模板。它什么也没做,只是简单地添加一个<script>
块,并用像window['prefix_propname'] = 'propvalue';
. 不是最优雅的方式,但效果很好。
但首先,如果你真的需要它是全球性的,我会重新考虑。很可能您可以简单地在主视图模型中使用设置(在主控制器的 init 上加载)的数据字段,然后根据需要通过其配置将设置的部分绑定到子级。然后,取决于设置值的逻辑将在孩子的配置更新/应用方法中,通过将设置作为参数之一的公式表示,或通过绑定(内部视图或控制器)表示。控制器内部的绑定是一个非常方便的功能,在我的使用中经常出现,它消除了必须处理异步加载的烦恼;例如:
// view controller
init: function() {
var vm = this.getViewModel();
vm.bind('{settings}', function(settings) {
//do your thing here
});
}
推荐阅读
- python-3.x - 如何获得一个人的 Xbox Live 服务令牌?
- mobx - MobX-state-tree store 没有出现在 props 中
- python - SQLAlchemy 在使用 fetchall 方法迭代结果后提交 sql 执行
- java - 启动带有启动画面的应用程序,但是当我运行它时
- git - Gitignore 文件不忽略来自上述目录的文件
- typescript - 如何从打字稿中的命名空间创建联合类型
- opencv - 用于机器人拧紧的传送带上的实时对象跟踪和孔检测
- javascript - 在 URL 上传递参数 Google 应用脚本和更新字段
- visual-studio - 在 Visual Studio 中启动时如何将 Docker 容器连接到 Docker 网络
- css - 背景图像不会在 Android 上重复-x Chrome