【问题标题】:Dojo: BorderContainer and ContentPanes not working inside of a custom widget templateDojo:BorderContainer 和 ContentPanes 在自定义小部件模板中不起作用
【发布时间】:2011-03-07 08:47:17
【问题描述】:

我正在尝试使用模板中的 dijit.layout 对象(BorderContainer、ContentPane)创建一些自定义模板化小部件,但我无法让它工作。也许 SO 可以引导我朝着正确的方向前进……这是我目前的代码:

test.html

<html>
<head>
<title>Test Page</title>
    <style type="text/css">
        @import "http://ajax.googleapis.com/ajax/libs/dojo/1.4.1/dojo/resources/dojo.css";
        @import "http://ajax.googleapis.com/ajax/libs/dojo/1.4.1/dijit/themes/tundra/tundra.css";
        html, body, #page {
            width: 100%; height: 100%; overflow: hidden;
        }
    </style>
    <script type="text/javascript">
        var djConfig = {
            isDebug: false,
            parseOnLoad: true,
            baseUrl: './',
            modulePaths: {'test' : '.'}
        };
    </script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/dojo/1.4.1/dojo/dojo.xd.js"></script>
<script type="text/javascript" src="test.js"></script>
<script>
    dojo.require('dijit.layout.BorderContainer');
    dojo.require('dijit.layout.ContentPane');
    dojo.require('test.testWidget');
    dojo.ready(function() {
        var widget = new test.testWidget({}, 'widgetGoesHere');
    });
</script>
</head>
<body class="tundra">
    <div id='widgetGoesHere'></div>
</body>
</html>

testWidget.js

dojo.provide('test.testWidget');
dojo.require('dijit._Widget');
dojo.require('dijit._Templated');
dojo.require('dijit.layout.BorderContainer');
dojo.require('dijit.layout.ContentPane');
dojo.declare('test.testWidget', [ dijit._Widget, dijit._Templated],  {
    templatePath: dojo.moduleUrl('test', 'testWidget.html'),
    widgetsInTemplate: true,
    
    postCreate: function() {
        this.inherited(arguments);
    }
});

testWidget.html

<div id="page" dojoType="dijit.layout.BorderContainer" liveSplitters="true" design='sidebar' style="height:100%;">
    <div dojoType="dijit.layout.ContentPane" region='center'>
        test center
    </div>
    <div dojoType="dijit.layout.ContentPane" region='left' style="width:50%">
        test left
    </div>
</div>

很抱歉这篇代码冗长的帖子,但我不知道为什么它不起作用,所以我无法用语言来描述我的问题。

我想要两个窗格,一个“左”(在本例中为 region='center')窗格和一个“右”窗格,我可以将小部件内容放入其中。上面的代码只是将文本呈现在根本没有窗格的 div。

【问题讨论】:

    标签: javascript dojo dijit.layout


    【解决方案1】:

    我在我的自定义小部件中混合了以下内容:

    dijit.layout._LayoutWidget, dijit._Templated, dijit._Container
    

    Container 允许您包含其他 dijit,例如 BorderContainer。 Templated 允许您将小部件标记放在 html 模板中。 LayoutWidget 允许您获取所有 dijit 布局和调整大小。

    如果您使用的是 dojo 1.4,templatePath 现在可以/应该是:

    templateString : dojo.cache("test", "testWidget.html")
    

    在您的模板中,您需要一个顶级 containerNode(我认为在创建小部件时会被 dojo 解析器取代),因此 testWidget 的模板将变为:

    <div dojoAttachPoint="containerNode" style="height:100%;">
    <div id="page" dojoType="dijit.layout.BorderContainer" liveSplitters="true" design='sidebar' style="height:100%;width:100%;" dojoAttachPoint="subContainerWidget">
        <div dojoType="dijit.layout.ContentPane" region='center'>
                test center
        </div>
        <div dojoType="dijit.layout.ContentPane" region='left' style="width:50%">
                test left
        </div>
    </div>
    

    【讨论】:

    • 一个问题,你用dojoAttachPoints containerNode 和subContainerNode 做什么?这无疑为我指明了正确的方向,它只是没有 100% 正常工作
    • 我在我的小部件代码中引用了这些节点,例如启动 : function () { this.subContainerWidget.startup(); this.inherited(参数); },记住调用继承版本的调整大小和启动,并记住调用自定义小部件上的启动。
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2011-09-30
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多