有人能给我解释一下为什么当drawSection
被称为“这个”值时,它会成为全局范围吗?
有没有办法在这里使用require,而不必在我丢失它之前将小部件保存在另一个变量中?
define("my/TextBox", [
"dojo/_base/declare",
"dijit/form/ValidationTextBox"
], function(
declare, ValidationTextBox
) {
function drawSection() {
alert(this);
require(["dojo/dom-construct"], function(domConstruct) {
alert(this); // this = window
});
};
return declare([ValidationTextBox], {
postCreate: function() {
this.inherited(arguments);
drawSection.call(this)
}
});
});
2条答案
按热度按时间ar5n3qh51#
使用
dojo/_base/lang
hitch()
函数来解决这个问题非常简单。因为
require(["dojo/dom-construct"], function(domConstruct) {....})
内的函数引用全局上下文,所以在当前上下文中使用
lang.hitch
函数(通过使用this
),问题就解决了这是一个Fiddle
及以上工作片段:
jrcvhitl2#
您需要像这样使用
dojo/_base/lang
lang.hitch
:这是一个常见的结束问题。
See https://dojotoolkit.org/reference-guide/1.10/dojo/_base/lang.html#hitch
作为一个好的实践,我建议将
drawSection
方法放在小部件内部,并将dom-construct
required放在顶部(在从postCreate
调用它时,您将始终需要它,因此"按需" require是多余的)