我有这个问题,我试图在逻辑之前显示一个微调器(即:正在加载...),这可能需要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
电话。
任何想法this
在setTimeout
的功能中保持不变?
答案 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);