gpt4 book ai didi

javascript - ExtJS:如何在 initComponent 方法中等待 Promise 响应?

转载 作者:行者123 更新时间:2023-11-30 11:15:34 25 4
gpt4 key购买 nike

我已经为 Container 类实现了一个 initComponent 方法,并通过 Promise 方法加载了 items 配置。

debugging 中的事情首先转到 callParent 行,然后执行转到 Promise 方法。我必须重新加载浏览器以能够获取 Promise 响应。

我已经在 initComponent 中尝试了 then() 方法但给出了错误。我怎样才能实现这种用法?

- 带有initComponent的容器类;

Ext.define('MyApp.view.Bar', {
extend: 'Ext.container.Container',
xtype: 'barview',
requires: [],
controller: 'barctrl',
viewModel: {
type: 'barvm'
},

initComponent: function () {
let me = this;
let fooInfo = MyApp.FooInfoClass.getFooInfo(); //There is a debugger in FooInfoClass but miss this one

if (fooInfo) {
if (fooInfo.self) {
me.items = [
{
xtype: 'componentA'
}
];
} else if (fooInfo.reference) {
me.items = [
{
xtype: 'componentB'
}
];
} else {
me.items = [
{
xtype: 'componentC'
}
];
}
}

debugger //Firstly comes to this one then goes to Promise
me.callParent(arguments);
}
});

- Promise 类和方法;

Ext.define('MyApp.FooInfoClass', {
requires: [],
singleton: true,
endpoint: MyApp.Url(),

getFooInfo: function () {
let me = this;
let responseInfo = localStorage.getItem('foo-info');

return JSON.parse(responseInfo);
},

setFooInfo: function (foo) {
let me = this;

me.foo = JSON.stringify(foo);
localStorage.setItem(me.fooInfo, me.foo);
},

fooInfo: function () {
let me = this;

return new Ext.Promise(function (resolve, reject) {
Ext.Ajax.request({
url: me.endpoint + '/info',

success: function(response, opts) {
let obj = Ext.decode(response.responseText);
let data = obj.data[0];
debugger //Secondly comes to here!
me.foo = data;
me.setFooInfo(me.foo);
resolve(me.foo);
},

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

最佳答案

您不应该推迟完成 initComponent 函数,直到您拥有所需的数据。您要么先获取数据,然后在所有所需信息一起实例化组件(在 Promise.then() 中执行 Ext.create()),要么让组件获取其所需的信息并根据这些信息在运行时添加子组件。在 initComponent 上调用 callParent 之前,您真正必须知道的事情很少。

如果我是你,我不会使用 me.items = ,而是使用 me.add() 以便在运行时添加子组件,初始化后。

我为你制作了一个简单的 fiddle :https://fiddle.sencha.com/#view/editor&fiddle/2k9r

关于javascript - ExtJS:如何在 initComponent 方法中等待 Promise 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com