Dojo Tollkit-对话框内部可滚动视图的高度

Dojo Tollkit-对话框内部可滚动视图的高度,dojo,Dojo,我使用的DojoToolkit 1.7.2来自 我需要显示可滚动(帮助触摸)对话框内的内容。此外,如果可能的话,我也需要在对话框内的视图之间进行转换,就像在mobile一样 我所做的(简化版代码): 如果我这样做,对话框将尝试适应内容的整个高度 下一次尝试: var dialog = new Dialog({ style: { width: 600, height: 400 } }); 或 现在对话框有固定的高度,但内部ScrollableVie

我使用的DojoToolkit 1.7.2来自

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

我所做的(简化版代码):

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

下一次尝试:

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

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

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

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

有没有什么方法可以在不实现自己版本的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");
修正方法如下:

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");
});

致欧内斯特·弗里德曼·希尔:嗨。禁止使用“==========”?我打赌这是相关的:尝试将height属性设置为“auto”?您需要修改80以匹配您的案例
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");
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");
});