如何使titlePane的高度动态化,以便在页面加载后将内容添加到窗格中,TitlePane将会扩展?
答案 0 :(得分:3)
看起来富内容编辑器是异步加载的iframe会混淆初始布局。
正如@missingno所提到的,调整大小功能是你想看的。
如果您在your page上执行以下功能,则可以看到它确实正确调整了所有内容:
//iterate through all widgets
dijit.registry.forEach(function(widget){
//if widget has a resize function, call it
if(widget.resize){
widget.resize()
}
});
上述函数遍历所有小部件并调整所有小部件的大小。这可能是不必要的。在初始化dijit.Editor之后,我认为你只需要在每个与布局相关的小部件上调用它。
在实际页面上执行此操作的最简单方法可能是将其添加到addOnLoad函数中。例如:
dojo.addOnLoad(function() {
dijit.byId("ContentLetterTemplate").set("href","index2.html");
//perform resize on widgets after they are created and parsed.
dijit.registry.forEach(function(widget){
//if widget has a resize function, call it
if(widget.resize){
widget.resize()
}
});
});
编辑:该问题的另一个可能的解决方法是将内容窗格上的doLayout
属性设置为false。默认情况下,所有ContentPane(包括TitlePane和dojox.layout.ContentPane等子类)都将此属性设置为true。这意味着ContentPane的大小是预先确定的并且是静态的。通过将doLayout
属性设置为false,ContentPanes的大小将随着内容变大或变小而有机增长。
答案 1 :(得分:2)
布局小部件有一个.resize()
方法,您可以调用该方法来触发重新计算。大多数情况下,您不需要自己调用它(如注释中的示例所示),但在某些情况下您别无选择。
答案 2 :(得分:1)
我已经举例说明了如何在窗格打开后加载数据并构建窗格内容。
困扰我的是在创建网格之后,我必须首先将其放入DOM,然后进入标题窗格,否则标题窗格将无法获得正确的高度。应该有更清洁的方法来做到这一点。
检查出来:http://jsfiddle.net/keemor/T46tt/2/
dojo.require("dijit.TitlePane");
dojo.require("dojo.store.Memory");
dojo.require("dojo.data.ObjectStore");
dojo.require("dojox.grid.DataGrid");
dojo.ready(function() {
var pane = new dijit.TitlePane({
title: 'Dynamic title pane',
open: false,
toggle: function() {
var self = this;
self.inherited('toggle', arguments);
self._setContent(self.onDownloadStart(), true);
if (!self.open) {
return;
}
var xhr = dojo.xhrGet({
url: '/echo/json/',
load: function(r) {
var someData = [{
id: 1,
name: "One"},
{
id: 2,
name: "Two"}];
var store = dojo.data.ObjectStore({
objectStore: new dojo.store.Memory({
data: someData
})
});
var grid = new dojox.grid.DataGrid({
store: store,
structure: [{
name: "Name",
field: "name",
width: "200px"}],
autoHeight: true
});
//After inserting grid anywhere on page it gets height
//Without this line title pane doesn't resize after inserting grid
dojo.place(grid.domNode, dojo.body());
grid.startup();
self.set('content', grid.domNode);
}
});
}
});
dojo.place(pane.domNode, dojo.body());
pane.toggle();
});
答案 3 :(得分:1)
我的解决方案是将innerWidget.startup()
移到"toggle"
的后建议中。
titlePane.aspect = aspect.after(titlePane, 'toggle', function () {
if (titlePane.open) {
titlePane.grid.startup();
titlePane.aspect.remove();
}
});
有关详细信息,请参阅dojo/aspect reference documentation。