doh测试后仍然保留Dojo小部件变量引用
Dojo widget variable reference still held after doh test
我一直在为Dojo小部件创建一些测试,以检查是否正确设置了布尔标志。然而,我发现,由于我修改了构造函数以传入对象,以前运行的测试似乎会影响后续的测试。
我曾尝试过在拆卸方法中销毁小部件,但无论我做什么,价值都会持续存在。
有人能告诉我可能做错了什么吗?
我的小工具代码:
var showControls = true;
return declare([WidgetBase, TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: template,
constructor: function (params) {
this.showControls = (typeof params.showControls === "undefined" || typeof params.showControls != "boolean") ? this.showControls : params.showControls;
}
});
我的测试课程是:
var customWidget;
doh.register("Test controls", [
{
name: "Test controls are not visible when set in constructor",
runTest: function() {
var params = { showControls: false };
customWidget = new CustomWidget(params);
doh.assertFalse(customWidget.getShowControls());
}
},
{
name: "Test controls are visible when set in constructor with string instead of boolean",
runTest: function() {
var params = { showControls: "wrong" };
customWidget= new CustomWidget(params);
doh.assertTrue(customWidget.getShowControls());
}
}
]);
因此,第一个测试通过,因为showControls设置为false,但是第二个测试尝试创建一个新实例,构造函数将在其中检查值是否为布尔值。然而,当我调试它时,它认为showControls一开始是"false",而不是true。
有线索吗?!
感谢
dijit/_WidgetBase
有一种混合构造函数参数的机制,这就是您所描述的行为的原因。一种可能的解决方案是将自定义setter定义为方法_set[PropertyName]Attr
:
var defaults = {
showControls: true
}
var CustomWidget = declare([_WidgetBase, _TemplatedMixin], {
templateString: "<div></div>",
constructor: function(params) {
declare.safeMixin(this, defaults);
},
_setShowControlsAttr: function(value) {
this.showControls = (typeof value === "boolean") ? value : defaults.showControls;
}
});
在行动中看到它:http://jsfiddle.net/phusick/wrBHp/
我建议您列出小部件的任何成员,如果不列出,传递到构造函数中的内容可能无法正确识别。你似乎想使用this.showControls,所以你应该有一个showControls成员。像这样:
return declare([WidgetBase, TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: template,
showControls: true, // default value
constructor: function (params) {
// no further action, params are automatically mixed in already
}
});
在列出成员时要小心,dojo将数组和对象解释为类成员(如Java中的static、AFAIK,它们附加到原型),因此如果您希望每个对象都有一个单独的值数组,请将其列为null并在构造函数中初始化。
相关文章:
- 限制javascript变量的最小/最大整数
- 将变量从PHP移动到Javascript小部件
- Dojo:小部件实例共享相同的变量
- 最小化时删除了 js 全局变量
- 将文本区域拆分为较小的变量
- 登录以使用 jquery 滚动函数将整数变量从最小值增加到最大值
- 姜戈;在自定义小部件中向媒体文件添加变量
- 设置最小变量
- 如何将 JavaScript 变量发送到 Java 小程序
- 使用$scope变量设置Datepicker最小/最大日期
- 将变量传递给dojo小部件构造函数
- 如何使用JavaScript变量设置小程序的param标记值
- 建立Javascript变量的最小值
- 如何将作用域变量传递给angular的本地输入最小属性
- 在javascript中,给一个变量赋一个更小或更大的值
- webpack在React中使用全局变量和方法来最小化可选文件
- 如何设置一个js变量的最小和最大边界
- 如何从Dojo声明性小部件访问本地变量
- 为什么一个较大的变量小于一个较小的变量
- doh测试后仍然保留Dojo小部件变量引用