使用没有dojo / parse的dijit

时间:2012-12-28 18:53:41

标签: javascript requirejs dojo

有没有办法使用dijit的BorderContainerContentPane使用现有的HTML /标记创建布局,并避免使用dojo / parse的.parse()方法?

我正在尝试将RequireJS与dojo / dijit的svn trunk中的最新代码一起使用,但不能使用.parse(),因为它依赖于RequireJS中不存在的require.on方法。

请注意,我有一个现有的模板,并且无法以编程方式创建BorderContainer,除非它需要一个参数来设置现有元素(也包含无法更改/删除的现有内容)。

2 个答案:

答案 0 :(得分:2)

是的,可以通过编程方式创建所有小部件。这就是dojo / parser在内部所做的事情。

举个例子:

require(["dojo/ready", "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/layout/TabContainer"], function(ready, BorderContainer, ContentPane, TabContainer){
    ready(function(){
        // create a BorderContainer as the top widget in the hierarchy
        var bc = new BorderContainer({style: "height: 500px; width: 800px;"});

        // create a ContentPane as the left pane in the BorderContainer
        var cp1 = new ContentPane({
            region: "left",
            style: "height: 100px",
            content: "hello world"
        });
        bc.addChild(cp1);

        // create a TabContainer as the center pane in the BorderContainer,
        // which itself contains two children
        var tc = new TabContainer({region: "center"});
        var tab1 = new ContentPane({title: "tab 1"}),
        tab2 = new ContentPane({title: "tab 2"});
        tc.addChild( tab1 );
        tc.addChild( tab2 );
        bc.addChild(tc);

        // put the top level widget into the document, and then call startup()
        document.body.appendChild(bc.domNode);
        bc.startup();
    });
});

答案 1 :(得分:0)

我不熟悉解析器中的require.on。 Dojo加载器应该符合RequireJS。

无论如何,我建议你将整个事情包装在一个小部件中 - 模板系统与解析器不同。然后,您可以以编程方式调用该主窗口小部件并传递您的选项。