重型加工没有时间让旋转器显示出来

时间:2014-10-24 15:33:48

标签: javascript extjs extjs4

我有这个问题,我试图在逻辑之前显示一个微调器(即:正在加载...),这可能需要1到10秒,具体取决于我必须渲染的字段数和网络访问权。 / p>

以下是窗口show事件的当前代码:

this.mainWindow().setLoading({ msg: this.strings.Messages.str_Wait });
this.Utils.formHelper.renderFormFields(this.mainWindow());
this.fieldsRendered = true;
this.hideEmptyTabs(w);
this.mainWindow().setLoading(false);

renderFormFields基本上是一个循环,在向表单添加/渲染字段时冻结界面。但它似乎甚至在setLoading微调器显示之前就开始了,因此所有用户看到的是一个没有渲染字段的空白窗口,在2-3秒后突然可用。

所以这就是我所做的:

this.mainWindow().setLoading({ msg: this.strings.Messages.str_Wait });
setTimeout(function () {
    this.Utils.formHelper.renderFormFields(this.mainWindow());
    this.fieldsRendered = true;
    this.hideEmptyTabs(w);
    this.mainWindow().setLoading(false);
}, 1000);

因此,在处理开始之前,这基本上会使微调器1秒正确显示。这里的问题是触发了大量事件,并且它们的逻辑需要this作为实际范围,而不是window对象,this函数中的setTimeout

我知道你可以将范围作为参数传递给setTimeout,但事实是所有被调用的代码都使用this,字面上和需要,因为相同的代码将在外部调用那个setTimeout电话。

任何想法thissetTimeout的功能中保持不变?

1 个答案:

答案 0 :(得分:1)

也许你声明一个变量me并像这样分配:

this.mainWindow().setLoading({ msg: this.strings.Messages.str_Wait });
var me = this;
setTimeout(function () {
    me.Utils.formHelper.renderFormFields(me.mainWindow());
    me.fieldsRendered = true;
    me.hideEmptyTabs(w);
    me.mainWindow().setLoading(false);
}, 1000);