Javascript dojo ListItem:调整大小时显示样式更改
很抱歉,我无法提供一个工作的JSFIDLE代码段。如果我了解如何将下面的代码放在问题中,我将更新该问题 使用Javascript dojo ListItem:调整大小时显示样式更改,javascript,html,css,dojo,Javascript,Html,Css,Dojo,很抱歉,我无法提供一个工作的JSFIDLE代码段。如果我了解如何将下面的代码放在问题中,我将更新该问题 使用dojox/mobile我用自定义列表项填充EdgeToEdgeStoreList。一些代码: html(jade) js 设备列表 就像模板字符串一样。调整大小后,内部div变为: <div style="display: block;" data-dojo-attach-point="labelNode">n.a.</div> n.a。 如果没有“内联”,所
dojox/mobile
我用自定义列表项填充EdgeToEdgeStoreList
。一些代码:
html(jade)
js
设备列表
就像模板字符串一样。调整大小后,内部div
变为:
<div style="display: block;" data-dojo-attach-point="labelNode">n.a.</div>
n.a。
如果没有“内联”,所有的布局都会混乱,因此字段“消失”(实际上是在下面,在下一行后面)
我想知道为什么会发生这种情况-显示样式被硬编码到模板字符串中
此外,我在运行时检查了CSS规则,这不是因为它们,而是html发生了变化——事实上。ListItem(dojox/Mobile/ListItem.js中的源代码)具有以下功能:
resize: function(){
if(this.variableHeight){
this.layoutVariableHeight();
}
// labelNode may not exist only when using a template (if not created by an attach point)
if(!this._templated || this.labelNode){
// If labelNode is empty, shrink it so as not to prevent user clicks.
this.labelNode.style.display = this.labelNode.firstChild ? "block" : "inline";
}
},
此函数在调整大小后调用,如您所见,将labelNode显示样式设置为“块”
定义DeviceListItem时,可以替换此函数,保持原始源代码不变,但更改显示样式。I似乎可以工作。但我认为labelNode
中填充了label
值。我的意思是,标签
值是否绑定到标签节点
?是的。我想this.labelNode.firstChild
只是用来检查它是否为空。是的,现在我理解了代码,但不是预期的默认行为!无论如何,重新实现这个功能似乎可以解决我的需要。我要做一些其他的测试,然后我会接受你的答案!
define([
"dojox/mobile/ListItem",
"dijit/_TemplatedMixin",
"dojo/_base/declare"
], function (ListItem, TemplatedMixin, declare) {
var template =
"<div class='deviceDone${done}'>" +
" ${id} - <div style='display: inline-block;' data-dojo-attach-point='labelNode'></div>" +
" <div class='deviceCategory'>${category}</div>" +
"</div>";
TemplatedListItem = declare("DeviceListItem",
[ListItem, TemplatedMixin], {
id: "",
label: "",
category: "",
done: "false",
templateString: template
}
);
});
<div id="item1728" class="deviceDoneFalse mblListItem mblListItemUnchecked" tabindex="0" widgetid="item1728" aria-selected="false" role="option">
item1728 -
<div style="display: inline-block;" data-dojo-attach-point="labelNode">n.a.</div>
<div class="deviceCategory">General purpose</div>
</div>
<div style="display: block;" data-dojo-attach-point="labelNode">n.a.</div>
resize: function(){
if(this.variableHeight){
this.layoutVariableHeight();
}
// labelNode may not exist only when using a template (if not created by an attach point)
if(!this._templated || this.labelNode){
// If labelNode is empty, shrink it so as not to prevent user clicks.
this.labelNode.style.display = this.labelNode.firstChild ? "block" : "inline";
}
},