Inheritance Dojo小部件声明字符串-它是临时的吗?

Inheritance Dojo小部件声明字符串-它是临时的吗?,inheritance,widget,dojo,amd,Inheritance,Widget,Dojo,Amd,我想知道这是一个暂时的东西('my.example.Widget')现在AMD已经出现了,还是会出现 declare('my.example.Widget', [], { }); 如果我有如上定义的小部件,我如何检查小部件的类型?有没有一种方法可以与AMD一起使用?检查您的Dijit小部件是否继承自特定的小部件或Mixin的方法是使用isInstanceOf功能,如下所示: var Widget = declare([_WidgetBase], { name: "Widget_Na

我想知道这是一个暂时的东西('my.example.Widget')现在AMD已经出现了,还是会出现

declare('my.example.Widget', [], {

});

如果我有如上定义的小部件,我如何检查小部件的类型?有没有一种方法可以与AMD一起使用?

检查您的Dijit小部件是否继承自特定的小部件或Mixin的方法是使用
isInstanceOf
功能,如下所示:

var Widget = declare([_WidgetBase], {
     name: "Widget_Name",
     id: "some_id"
});
var widgetInstance = new Widget();
console.log(widgetInstance.isInstanceOf(Widget)); // True
console.log(widgetInstance.isInstanceOf(_WidgetBase)); // True
console.log(widgetInstance.isInstanceOf(_TemplatedMixin)); // False

你可以看到它的实际作用。

对不起,我不明白这个问题。你能用其他的话来解释吗?你不应该再需要它了,尽管这是向后兼容的好方法。你是说如果你像
declare([],{})
那样声明你的小部件,你的代码就不能识别你的小部件类型了?您是否至少尝试过让您的小部件扩展dijit/\u WidgetBase?此外,如果要包含字符串,v1.7+中较新的样式是“my/example/Widget”。如果您不这样做,并尝试将其声明性地与
data dojo type=“my.example.Widget”
一起使用,您将得到一个错误。现在我想了想,您是如何尝试使用这个小部件来获得未纠正的TypeError的?因为我使用的是Dojo的.isInstanceOf()函数,我无法想象这将如何处理/而不是,传入类型而不是字符串?您会说“您至少可以尝试一下…”现在我想知道,在Dojo/AMD中检查小部件类型的最终方法是什么?请记住,我不想知道一切,即使它是mixin的一个实例,而不仅仅是主类型。我用widget.isInstanceOf('my/example/widget')尝试过它,但失败了。因此,您必须在您要检查的类型作为依赖项导入的上下文中检查它。不幸的是,是的。我可以想到一个自定义函数,您可以使用它来传递字符串,但是它需要对“隐藏的”小部件属性进行一些“脏的”自省。对于dirty,我的意思是,根据dojo,这是一个糟糕的实践,因为您必须访问您的widget类的元信息。Dojo有这样一句话:所有的元信息都会发生变化,不应该在正常的编码过程中使用。如果您使用它,请准备在代码更改时更新代码。如果您同意(由于Dojo库“后端”更改,它可能会在没有太多警告的情况下中断),然后询问另一个有关如何完成此操作的StackOverflow问题(检查小部件是否是基于字符串的特定类型)我很乐意给你一些选择。