1

我使用来自http://ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js的 Dojo Toolkit 1.7.2

我需要在对话框中显示可滚动(通过帮助触摸)内容。此外,如果可能的话,我也需要在对话框内的视图之间进行转换,就像在移动设备上一样。

我做什么(代码的简化版本):

var dialog = new Dialog();
var view = new ScrollableView({
    selected: true
});

//add some content inside view. Content heigh is greater than height of dialog.

如果我这样做,对话框会尝试适应内容的整个高度。

下一次尝试:

var dialog = new Dialog({
    style: {
        width: 600,
        height: 400
    }
});

或者

dialog.resize({w: 600, h: 400});

现在对话框具有固定高度,但内部 ScrollableView 实例不会滚动到其内容的底部。

当我深入研究源代码时,我发现 ScrollableView 继承自 dojox/mobile/_ScrollableMixin,后者继承自 dojox/mobile/scrollable。

dojox resize()/mobile/scrollable 函数使用窗口高度来计算滚动功能。

有没有办法在不实现我自己的 ScrollableView 版本的情况下获得我需要的东西?


解决方案:

var dialogRect = domGeometry.getMarginBox(dialog.domNode);
var headerRect = domGeometry.getMarginBox(dialog.titleBar);
var containerNodePaddingTop = domStyle.get(dialog.containerNode, "paddingTop");
var containerNodePaddingBottom = domStyle.get(dialog.containerNode, "paddingBottom");

var viewHeight = dialogRect.h - headerRect.h - containerNodePaddingTop - containerNodePaddingBottom;
var view = new ScrollableView({
    selected: true,
    height: viewHeight.toString() + "px"
});
// or
// view.set("height", viewHeight.toString() + "px");
4

1 回答 1

0

以这种方式修复它:

var Name = 'yourdialogid';
dojo.query("#"+Name+" .dijitDialogPaneContent").forEach(function(node, index, arr){
   dojo.style(node,"overflow","auto");
   dojo.style(node,"height",(dojo.position(dijit.byId(Name).domNode).h-80)+"px");
});
于 2012-07-30T09:18:39.143 回答