我正在编写一个小部件,它采用所有子<img>
标签,获取src
属性,并且应该创建一个无序列表,其中子列表元素的背景是上述来源。但是,当我创建列表元素并告诉 dojo 将它们放在 master<ul>
中时,它们最终会出现在外面。这个小部件是链中的第三个,如下所示:
+ ImageBox
++ AnimImageBox
++ SlideImageBox
+++ AnimSlideImageBox (TBA)
主列表创建:
buildRendering : function(){
this.inherited(arguments);
// Create the slidebox <ul>
this.slideHolder = domConstruct.create('ul', {
className : 'imagebox-slide'
}, this.domNode, 'first');
}
这是该_lazyLoad
方法的块。它最初是在根ImageBox
类中定义的,在这里被覆盖,称为 inside postCreate()
:
var self = this;
query('img', this.domNode).forEach(function(image){
// With each found image, push the src attribute into our class-wide array
var src = domAttr.get(image, 'src');
self.images.push(src);
// Create an <li> for the slide block
var li = domConstruct.create('li', {
className : 'slide'
}, self.slideHolder);
// Destroy the <img /> element
domConstruct.destroy(image);
});
类结构/方法调用概述:
ImageBox.js
buildRendering():
- Creates the preloader
postCreate():
+ Calls _lazyLoad to extract image data, load, show progress, etc.
SlideImageBox.js(我遇到的问题)
buildRendering():
- Calls the superclass method, and then creates the <ul> element, placing to this.domNode
postCreate():
- Just calls the superclass postCreate() method (via this.inherited(args))
_lazyLoad():
- Overridden completely, is called correctly as tested with various log() calls.
预期结果
<ul class="imagebox-slide">
<li class="slide"><!--Content --></li>
<li class="slide"><!--Content --></li>
<li class="slide"><!--Content --></li>
</ul>
结果
<ul class="imagebox-slide"></ul>
<li class="slide"><!--Content --></li>
<li class="slide"><!--Content --></li>
<li class="slide"><!--Content --></li>
在每一步我都可以log()
找到节点,所以我知道它们存在,但是这domConstruct.create()
条线并没有将它们放入节点中。我已经不止一次像这样处理道场了,所以也许这与我在某个地方的继承有关?
也许已经很晚了,需要一双新的眼睛,或者这里有其他事情在起作用?
编辑
@DavidMcMullin,place
我遇到的问题是隐式调用的create
,抱歉我没有强调这一点。
@Frode,它需要从其他 2 个 .js 文件继承,我没有使用足够的提琴手来知道如何设置它,不过我会调查一下。
@Stephen,就是这样,结果,不知何故,创建顺序已经关闭,即使log()
声明告诉我它不是,我想我已经尝试过了......我必须进行一些重构以适应在超类中调用的方法,但很高兴它现在可以工作。提出答案,我会接受。