是否可以在 dojo 的 dialog/modal 对话框中显示拆分容器?
Is that possible to show split container inside dialog/modal dialog in dojo?
我试图以编程方式在对话框中添加 SplitContainer,但我无法成功。
有人可以建议我在对话框中添加 SplitContainer 吗?如果是的话,请把样品分享给我。
谢谢
穆卢甘
弹出窗口小部件是我们自己的小部件,派生自 dojo 对话框。
define("storm/service/serviceErrorDeploy/serviceErrorDeploy", ["dojo/_base/declare",
"dojo/data/ItemFileWriteStore",
"xwt/widget/table/Table",
"dijit/layout/ContentPane",
"dijit/tree/ForestStoreModel",
"xwt/widget/layout/Popover",
"dojo/_base/lang",
"dojo/dom",
"dojo/i18n!storm/nls/actions",
"xwt/widget/table/GlobalToolbar",
"xwt/widget/tree/Tree",
'dojo/dom-construct',
'dojo/query',
"dojo/_base/array"
], function(declare, ItemFileWriteStore, Table,ContentPane, ForestStoreModel, Popover,lang,dom,nls,GlobalToolbar,Tree,domConstruct,query,array){
return declare("storm.topology.serviceErrorDeploy.widget.serviceErrorDeploy", [Popover], {
i18n: nls,
id:"serviceErrorPop",
pinnable:false,
baseClass: "serviceErrorDeploy",
errorProvisioningDetailsTable:null,
errorProvisioningDetailsCPane:null,
summaryData : null,
url : '/webacs/api/v1/data/DeviceConfigDeploymentStatus.json?.full=true&cfsId=',
tableData:null,
resizable:true,
treeArray: [],
postCreate: function(){
this.inherited(arguments);
if(dijit.byId('errorProvisioningDetailsCPaneID')){
try {
dijit.byId('errorProvisioningDetailsCPaneID').destroy();
}catch(err) {console.log(err);}
}
var tableTrs = query('.serviceErrorDeployPopup');
tableTrs.forEach(lang.hitch(this,function(obj){
var node = query('.xwtPopoverClose',obj)[0];
if(node && node !=undefined)
node.click();
}));
},
setValues: function(values, cell){
this.inherited(arguments);
this.setAttribute('title',values.name);
this.url += values["@id"]?values["@id"]:values.version>=0?values.provisionedCfsId:values.discoveredCfsId;
this.createWidgetStructure();
},
createWidgetStructure:function(){
this.splitterPane = new xwt.widget.layout.SplitContainer({id:'errorDetailsSplitContainer',useFullViewPort:true}, this.containerNode);
this.errorProvisioningDetailsCPane = new ContentPane({
id: "errorProvisioningDetailsCPaneID",
region: "top",
style:"height:100%;border: 1px white solid;overflow:hidden;"
});
this.errorDetailsTreeCPane = new ContentPane({
id: "errorDetailsTreeCPaneID",
region: "center",
style:"height:270px;border: 1px white solid;"
});
this.splitterPane.addChild(this.errorProvisioningDetailsCPane);
this.splitterPane.addChild(this.errorDetailsTreeCPane);
this.splitterPane.startup();
this.splitterPane.resize();
},
hide: function(evt) {
this.inherited(arguments);
if (this.errorProvisioningDetailsCPane) {
this.errorProvisioningDetailsCPane.destroyRecursive();
this.errorProvisioningDetailsCPane = null;
}
this.treeArray = [];
},
destroy: function(){
this.inherited(arguments);
if (this.errorProvisioningDetailsCPane) {
this.errorProvisioningDetailsCPane.destroyRecursive();
this.errorProvisioningDetailsCPane = null;
}
this.treeArray = [];
}
});
});
请注意 SplitContainer
已弃用,因此您应该改用其他布局,在这种情况下使用 BorderContainer
并使用 liveSplitter:true
可能对您有所帮助,
请查看此工作Fiddle。
和一个工作片段:
require(["dijit/layout/BorderContainer","dijit/layout/ContentPane","dijit/Dialog","dijit/registry", "dojo/dom","dojo/on","dijit/form/Button","dojo/ready"],
function(BorderContainer,ContentPane,Dialog,registry,dom,On,Button,ready){
ready(function(){
myDialog = new Dialog({
title: "My Dialog",
content: "Test content.",
style: "width: 300px"
},"dialog");
var borderContainer = new BorderContainer({
style:"height: 300px; width: 300px",
gutters:true,
liveSplitters:true
});
var cp1 = new ContentPane({
region: "center",
splitter:true,
style: "width: 100px",
content: "content 1"
});
borderContainer.addChild(cp1);
var cp2 = new ContentPane({
splitter:true,
region: "right",
content: "content 2"
});
borderContainer.addChild(cp2);
myDialog.addChild(borderContainer);
On(registry.byId("btn"),"click",function(e){
myDialog.show();
})
});
}
);
<script>
dojoConfig = {
isDebug: true,
parseOnLoad: true,
};
</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<link href="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css" rel="stylesheet"/>
<body class="claro">
<div data-dojo-type="dijit/form/Button" id="btn"> click me </div>
<div id="dialog"></div>
</body>
我试图以编程方式在对话框中添加 SplitContainer,但我无法成功。
有人可以建议我在对话框中添加 SplitContainer 吗?如果是的话,请把样品分享给我。
谢谢 穆卢甘
弹出窗口小部件是我们自己的小部件,派生自 dojo 对话框。
define("storm/service/serviceErrorDeploy/serviceErrorDeploy", ["dojo/_base/declare",
"dojo/data/ItemFileWriteStore",
"xwt/widget/table/Table",
"dijit/layout/ContentPane",
"dijit/tree/ForestStoreModel",
"xwt/widget/layout/Popover",
"dojo/_base/lang",
"dojo/dom",
"dojo/i18n!storm/nls/actions",
"xwt/widget/table/GlobalToolbar",
"xwt/widget/tree/Tree",
'dojo/dom-construct',
'dojo/query',
"dojo/_base/array"
], function(declare, ItemFileWriteStore, Table,ContentPane, ForestStoreModel, Popover,lang,dom,nls,GlobalToolbar,Tree,domConstruct,query,array){
return declare("storm.topology.serviceErrorDeploy.widget.serviceErrorDeploy", [Popover], {
i18n: nls,
id:"serviceErrorPop",
pinnable:false,
baseClass: "serviceErrorDeploy",
errorProvisioningDetailsTable:null,
errorProvisioningDetailsCPane:null,
summaryData : null,
url : '/webacs/api/v1/data/DeviceConfigDeploymentStatus.json?.full=true&cfsId=',
tableData:null,
resizable:true,
treeArray: [],
postCreate: function(){
this.inherited(arguments);
if(dijit.byId('errorProvisioningDetailsCPaneID')){
try {
dijit.byId('errorProvisioningDetailsCPaneID').destroy();
}catch(err) {console.log(err);}
}
var tableTrs = query('.serviceErrorDeployPopup');
tableTrs.forEach(lang.hitch(this,function(obj){
var node = query('.xwtPopoverClose',obj)[0];
if(node && node !=undefined)
node.click();
}));
},
setValues: function(values, cell){
this.inherited(arguments);
this.setAttribute('title',values.name);
this.url += values["@id"]?values["@id"]:values.version>=0?values.provisionedCfsId:values.discoveredCfsId;
this.createWidgetStructure();
},
createWidgetStructure:function(){
this.splitterPane = new xwt.widget.layout.SplitContainer({id:'errorDetailsSplitContainer',useFullViewPort:true}, this.containerNode);
this.errorProvisioningDetailsCPane = new ContentPane({
id: "errorProvisioningDetailsCPaneID",
region: "top",
style:"height:100%;border: 1px white solid;overflow:hidden;"
});
this.errorDetailsTreeCPane = new ContentPane({
id: "errorDetailsTreeCPaneID",
region: "center",
style:"height:270px;border: 1px white solid;"
});
this.splitterPane.addChild(this.errorProvisioningDetailsCPane);
this.splitterPane.addChild(this.errorDetailsTreeCPane);
this.splitterPane.startup();
this.splitterPane.resize();
},
hide: function(evt) {
this.inherited(arguments);
if (this.errorProvisioningDetailsCPane) {
this.errorProvisioningDetailsCPane.destroyRecursive();
this.errorProvisioningDetailsCPane = null;
}
this.treeArray = [];
},
destroy: function(){
this.inherited(arguments);
if (this.errorProvisioningDetailsCPane) {
this.errorProvisioningDetailsCPane.destroyRecursive();
this.errorProvisioningDetailsCPane = null;
}
this.treeArray = [];
}
});
});
请注意 SplitContainer
已弃用,因此您应该改用其他布局,在这种情况下使用 BorderContainer
并使用 liveSplitter:true
可能对您有所帮助,
请查看此工作Fiddle。
和一个工作片段:
require(["dijit/layout/BorderContainer","dijit/layout/ContentPane","dijit/Dialog","dijit/registry", "dojo/dom","dojo/on","dijit/form/Button","dojo/ready"],
function(BorderContainer,ContentPane,Dialog,registry,dom,On,Button,ready){
ready(function(){
myDialog = new Dialog({
title: "My Dialog",
content: "Test content.",
style: "width: 300px"
},"dialog");
var borderContainer = new BorderContainer({
style:"height: 300px; width: 300px",
gutters:true,
liveSplitters:true
});
var cp1 = new ContentPane({
region: "center",
splitter:true,
style: "width: 100px",
content: "content 1"
});
borderContainer.addChild(cp1);
var cp2 = new ContentPane({
splitter:true,
region: "right",
content: "content 2"
});
borderContainer.addChild(cp2);
myDialog.addChild(borderContainer);
On(registry.byId("btn"),"click",function(e){
myDialog.show();
})
});
}
);
<script>
dojoConfig = {
isDebug: true,
parseOnLoad: true,
};
</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
<link href="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dijit/themes/claro/claro.css" rel="stylesheet"/>
<body class="claro">
<div data-dojo-type="dijit/form/Button" id="btn"> click me </div>
<div id="dialog"></div>
</body>