我正在尝试将设置存储到全局变量中。
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”变量。这就是为什么它必须是全球性的。
答案 0 :(得分:0)
我们过去在应用启动之前用于初始化设置的一种方法是对HTML文件使用服务器端模板。它什么也没做,只是添加一个<script>
块,并用window['prefix_propname'] = 'propvalue';
之类的行填充它。这不是最优雅的方式,但它工作得很好。
但是首先,我会重新考虑您是否真的需要使其具有全球性。您可能只是在main的viewmodel中有一个带有设置的数据字段(这些设置已加载到main的控制器的init中),然后根据需要通过其配置将设置的各部分绑定到子级。然后,取决于设置值的逻辑将在子级的config更新/应用方法中,通过将设置作为参数之一的公式表示,或通过绑定(内部视图或控制器)表示。控制器内部的绑定是一个非常方便的功能,在我的使用中经常出现,它消除了必须处理异步加载的烦恼。例如:
// view controller
init: function() {
var vm = this.getViewModel();
vm.bind('{settings}', function(settings) {
//do your thing here
});
}
答案 1 :(得分:0)
您需要的只是extjs单例。获取成功函数内部单的实例,并指定您的设置给单身。还有一种更简单的方法来添加单例,即通过在窗口对象中添加设置。
success: function(response) {
window["settings"] = Ext.decode(response.responseText);
}
现在您应该可以在整个应用程序中全局访问设置。仍然console.log将没有实际值,因为将是为ajax调用创建的其他线程,当前执行将继续,而无需等待成功功能。您的“成功”你会看到的内容执行后键入“设置”。