如何在dojox.mobile.EdgeToEdgeList中创建相同高度的ListItem?

时间:2012-07-12 19:10:51

标签: dojo dojox.mobile

我有一个标准的dojox.mobile.EdgeToEdge列表,里面有一组dojox.mobile.ListItem个。我需要确保每个列表项具有相同的高度。请参阅下面的绘制不佳的表示:

标准EdgeToEdgeListListItem s:

+-------------------+
| Standard ListItem |
|-------------------|
| Standard ListItem |
|-------------------|
| Standard ListItem |
|-------------------|
| Standard ListItem |
+-------------------+

标准EdgeToEdgeList可变高度列表项;通过在列表项上设置variableHeight属性来实现:

+-------------------+
| Standard ListItem |
|-------------------|
| Standard ListItem |
|-------------------|
| Standard ListItem |
| with some long    |
| text and variable |
| height that wraps |
| to next line      |
|-------------------|
| Standard ListItem |
+-------------------+

EdgeToEdgeList具有相同的高度列表项(较小的列表项“取”最大的高度):

+-------------------+
|                   |
|                   |
| Standard ListItem |
|                   |
|                   |
|-------------------|
|                   |
|                   |
| Standard ListItem |
|                   |
|                   |
|-------------------|
| Standard ListItem |
| with some long    |
| text and variable |
| height that wraps |
| to next line      |
|-------------------|
|                   |
|                   |
| Standard ListItem |
|                   |
|                   |
+-------------------+

我正在尝试复制第三种解决方案。有没有标准的方法来做到这一点?

编辑:我没有提到我正在以编程方式构建列表,所以我不知道手头最大项目的高度。这样的事情能起作用吗?

var largest = 0;
array.forEach(list.getChildren(), function(child) {
    var childHeight = domStyle.get(child.domNode, 'height');

    largest = (childHeight > largest) ? childHeight : largest;
});

array.forEach(list.getChildren(), function(child) {
    domStyle.set(child.domNode, 'height', largest + 'px');
});

这似乎有点“黑客”。

1 个答案:

答案 0 :(得分:0)

覆盖.mblListItem CSS类中的height属性。

我相信默认高度是43px。

编辑:我认为您的代码可以运行,但您需要将ListItem设置为variableHeight,以便Dojo计算每个代码的高度,然后取最大并将其应用于每个。与您编写的内容类似,但添加了variableHeight,然后在应用最大高度时将其删除。

var largestHeight = 0;
var list = dijit.byId("list");
dojo.forEach(data, function(record) {
    var listItem = new dojox.mobile.ListItem({
        label: data.label
        variableHeight: true,
    }); 
    list.addChild(listItem); 
    var currentHeight = (dojo.style(listItem.domNode, 'height');
    largestHeight = (currentHeight > largestHeight ? currentHeight : largestHeight);
});

dojo.query('.mblListItem', dojo.byId('list')).forEach(function(node) {
    dojo.removeClass(node, 'mblVariableHeight');
    dojo.style(node, 'height', largestHeight + 'px');
});