dojo 你能在单独的文件中创建组件吗(比如Angular ),以实现更模块化的设计

yiytaume  于 2022-12-16  发布在  Dojo
关注(0)|答案(1)|浏览(135)

我一直在阅读/做教程,但一定是缺少了什么。我来自一个有Angular 的背景。
你能把html分成像angular这样的组件吗?我遇到的问题是我有大约5个复杂的面板要在Map上显示。它们目前都在一个html文件中,这使得它非常大(每个面板都很复杂)。
你会为每一个都做小部件吗?你会在创建小部件时使用html吗?

ohtdti5x

ohtdti5x1#

你可以为每个组件定义 * widget *,并按照你的意愿组合它们,你也可以将html模板定义为单独的文件,或者只在widget内部定义为模板字符串。
Dojo教程有点混乱,所以我将给予您一个示例:

require([
    'dojo/_base/declare',
    'dijit/_WidgetBase',
    'dijit/_TemplatedMixin'],
    function(declare, _WidgetBase, _TemplatedMixin) {
    
    
    const Header = declare([ _WidgetBase, _TemplatedMixin], {
      templateString: '<div>I am Header</div>'
    })
    
    
    const App = declare([ _WidgetBase, _TemplatedMixin], {
      templateString: '<div><div data-dojo-attach-point="headerNode"></div>I am App</div>',
      constructor: function() {
        this.header = new Header()
      },
      postCreate: function() {
        this.header.placeAt(this.headerNode)
        this.header.startup()
      }
    })
    

    
    let app = new App({}, 'app')
    
    })
<script data-dojo-config="async: 1"
            src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>
            
          
            
<div id="app">
  
</div>

在本例中,我定义了两个小部件:HeaderApp您可以从另一个widget创建一个示例,并将其放置在任何domNode中。实际上,有很多方法可以创建它。
在代码片段中,我在一个require函数中声明了两个小部件,但您可以在单独的文件中这样做:

define([
    'dojo/_base/declare',
    'dijit/_WidgetBase',
    'dijit/_TemplatedMixin',
    'dojo/text!templateHtml'
], function (declare, _WidgetBase, _TemplatedMixin, template) {

    return declare([_WidgetBase, _TemplatedMixin], {
        templateString: template 

        /// code of widget.............

})

在这种情况下,你的模块必须返回一个声明函数和你的小部件类,然后你就可以要求这个小部件作为另一个小部件的依赖项。

相关问题