好吧,我想我可以更清楚地表达我想完成的事情。
为了保存时间和代码编写,我想创建一个包含其他dijit的模块/小部件,如BorderContainer、TabContainer等等。我希望该模块是编程的,而不是基于模板的。
在index.php中,我想简单地加载我的应用程序,如下所示...
我的第一个问题是...
这是创建一个包含其他小部件/模块的模块的正确方法吗?
我的下一个问题是...
我的SuperScreen.js结构应该是什么样的?
现在,它看起来像这样...
但显然这是行不通的。
对“bc”的引用位于构造函数中,因此自然不可用于placeAt函数调用。
我的边界容器应该在构造函数中还是在其他地方?
看起来声明函数允许继承。我很困惑,因为我不想从BorderContainer继承,我只想使用它。
2条答案
按热度按时间zphenhs41#
第一个问题:简短回答是肯定,
然后,要使bc对placeAt可见,可以在SuperScreen.js中执行以下操作:
或者,您可以执行以下操作:
在第一个解决方案中,bc是一个静态变量,对构造函数和placeAt都是可见的。然后,它在SuperScreen的所有示例中共享,如果SuperScreen只被示例化一次,这也没有什么坏处。不过,你还是应该使用第二个解决方案,至少“以防万一”。如果你打算多次示例化SuperScreen,那么解决方案2是强制性的。其中每个SuperScreen示例有一个bc(一个不同的BorderContainer)。
这就是为什么在只需要一个示例的情况下,我更喜欢返回普通对象的模块,而不是类,因为我觉得它传递了正确的语义(一个示例化一次的类实际上不需要是一个类,dojo/define允许这样做,所以我使用它!),最后它会产生更简单的代码:
要回答您的问题“您的BorderContainer应该在构造函数中还是在其他地方?":
declare(null, function(...){})
-构造函数是你唯一的选择。有关声明和dojo类的更多细节,请参见dojo文档here。declare(_WidgetBase, function(...){})
,那么它将是一个小部件,在这种情况下,您将有一个选择,如dojo doc here中所述,postCreate()是一个常用方法(引用该文档,“到目前为止,要记住的最重要的方法......”);以上内容可能回答了您的最后一个问题:不用担心,您实际上只是在使用BorderContainer,而不是从它继承。
z31licg02#
这里有一个很好的入门项目-https://github.com/denov/dojo-demo
HomePage.js非常接近您的SuperScreen.js