【问题标题】:Dojo TabContainer doesn't get formatted correctly until after I do an Inspect Element在我执行 Inspect Element 之前,Dojo TabContainer 没有正确格式化
【发布时间】:2013-08-07 13:30:12
【问题描述】:

我有一个带有几行数据的 Dojo DataGrid。当我单击一行时,我在另一个 <div> 中创建了一个 TabContainer。这是它最终的样子:

TabContainer 的格式不正确。但是,在我执行“检查元素”之后,格式会自行更正:

但是,提交按钮会在格式更正后消失。

这是我用来创建 DataGridTabContainer 的代码:

<div id="r_body">
    <div id="r_list">

    </div>
    <div id="r_form">
        <div data-dojo-type="dijit/form/Form" id="parameters_form" data-dojo-id="parameters_form" encType="multipart/form-data" action="" method="">
            {% csrf_token %}
            <div>
                <div id="r_tab_container"></div>
            </div>
            <div>
                <p></p>
                <button id="submit_parameters" dojoType="dijit/form/Button" type="submit" name="submitButton" value="Submit">
                    Submit
                </button>
            </div>
        </div>
    </div>
</div>

<script type="text/javascript">
    require([
        "dijit/layout/BorderContainer",
        "dijit/layout/ContentPane",
        "dojox/grid/DataGrid" ,
        "dojo/data/ItemFileWriteStore" ,
        "dojo/dom",
        "dojo/domReady!"
    ], function(BorderContainer, ContentPane, DataGrid, ItemFileWriteStore, dom){
        // create a BorderContainer as the top widget in the hierarchy
        var bc = new BorderContainer({
            style: "height: 500px; width: 230px;"
        }, "r_list");

        /*set up data store*/
        var data = {
          identifier: "id",
          items: []
        };


        data.items.push({ id: 'some_id', description: 'some_description',

        var store = new ItemFileWriteStore({data: data});

        /*set up layout*/
        var layout = [[
            {'name': 'Title', 'field': 'description', 'width': '200px', 'noresize': true}
        ]];

        /*create a new grid*/
        var r_list_grid = new DataGrid({
            region: "left",
            id: 'r_list_grid',
            store: store,
            structure: layout,
            rowSelector: '0px'
        });

        bc.addChild(rt_list_grid);

        bc.startup();

        list_grid.on("RowClick", gridRowClick);
        function gridRowClick(evt){
            var idx = evt.rowIndex;
            var rowData = list_grid.getItem(idx);
            var r_url = rowData['url'][0];
            var r_id = rowData['id'][0]

            require(["dojo/dom", "dojo/request/xhr", "dojo/dom-form", "dijit/layout/TabContainer", "dijit/layout/ContentPane", "dojo/ready", "dojo/domReady!"],
                    function(dom, xhr, domForm, TabContainer, ContentPane, ready){
                var url = window.location.pathname + "dev/" + r_id + "/" + r_url + "/";
                xhr(url, {
                    method: "get"
                }).then(
                    function(response){
                        var json_response = JSON.parse(response);
                        var fields_dict = json_response['fields_dict'];
                        var tc = new TabContainer({
                            style: "height: 100%; width: 100%;"
                        }, "r_tab_container");

                        for(var key in fields_dict) {
                            var content_string = '';
                            var fields = fields_dict[key];
                            for(var field in fields) content_string += '<div>' + field + '</div>';
                            var tcp = new ContentPane({
                                 title: key,
                                 content: content_string
                            });
                            tc.addChild(tcp);
                        }

                        tc.startup();
                    },
                    function(error){
                        //Error stuff
                    }
                );
            });
        }
    });
</script>

那么这里发生了什么以及如何修复 TabContainer 格式?谢谢!

【问题讨论】:

  • 看起来 TabContainer 不知道您的 DataGrid 的大小。尝试在 DataGrid 上设置大小。
  • @Philippe 我在 DataGrid 声明中添加了style: "height: 488px; width: 215px"。没修好。
  • 也尝试先设置 div 的样式...我在这里有一个工作示例:jsfiddle.net/psoares/TYw2Z/embedded/result,还需要对代码进行一些清理,因为您的网格上有错误的 id (r_list_grid vs list_grid.. .)
  • @Philippe 好的,我会看看我能用我的 div 做什么。错误的 id 是因为我在粘贴代码之前更改了所有 id 名称并遗漏了一些。
  • 已修复。在我执行tc.startup(); 之后,我必须执行tc.resize();。谢谢!

标签: dojo dojox.grid.datagrid tabcontainer


【解决方案1】:

在完成tc.startup(); 之后,我必须执行tc.resize();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2013-03-13
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多