我使用来自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");