在没有 HTML 的情况下以编程方式创建 dojox/app 视图

Creating dojox/app Views Programmatically without HTML

我正在考虑制作一个网络应用程序,并且正在考虑使用 dojox/app 来完成它。

我更愿意对 dojo 使用更具程序化的方法,但似乎 dojox/app 主要是声明性的。

经过一番搜索,我找到了一个基本上问我同样问题的存档 http://dojo-toolkit.33424.n3.nabble.com/Questions-about-dojox-app-design-td3988709.html

Hay guys, I've been looking at the livedocs for dojox.app and while it seems quite cool I >have to say some stuff isn't clear to me.

Specifically, is the "template" property of views - specifying an html file - a >must or optional?

这是在 2012 年。

从那时起,我在文档的示例中找到了 customeApp 测试,它似乎在 dojox/app 中显示了基本的编程视图,但是我在理解它时遇到了一些困难。

我想像这样创建我的应用程序的不同视图

require([
  "dojo/dom",
  "dojo/ready",
  "dojox/mobile/Heading",
  "dojox/mobile/ToolBarButton"
], function(dom, ready, Heading, ToolBarButton){
  ready(function(){
    var heading = new Heading({
      id: "viewHeading",
      label: "World Clock"
    });
    heading.addChild(new ToolBarButton({label:"Edit"}));
    var tb = new ToolBarButton({
      icon:"mblDomButtonWhitePlus",
      style:"float:right;"
    });
    tb.on("click", function(){ console.log('+ was clicked'); });
    heading.addChild(tb);
    heading.placeAt(document.body);
    heading.startup();
  });
});

但我只能找到这样的例子

<div data-dojo-type="dojox/mobile/Heading" data-dojo-props='label:"World Clock"'>
  <span data-dojo-type="dojox/mobile/ToolBarButton">Edit</span>
  <span data-dojo-type="dojox/mobile/ToolBarButton"
        data-dojo-props='icon:"mblDomButtonWhitePlus"'
        style="float:right;" onclick="console.log('+ was clicked')"></span>
</div>

有没有办法以编程方式解决这个问题,或者我可以在某个地方找到关于这里发生的事情的一些说明 https://github.com/dmachi/dojox_application/tree/master/tests/customApp

当然可以。我长期以来一直以编程方式创建它们,并且相信它比模板化要好得多。处理框架的难点在于知道要搜索的关键字。我相信,您的答案可以通过学习 Dojo WidgetBase 以及任何其他使用 "Widget".

一词的内容找到

好的开始就在这里http://dojotoolkit.org/reference-guide/1.10/quickstart/writingWidgets.html。要成功使用 Dojo Widgets,您还需要:

  • 生命周期的概念http://dojotoolkit.org/reference-guide/1.10/dijit/_WidgetBase.html#id5。生命周期注入点将允许您使用 JavaScript 本机 API 修改模板的 DOM 树,因此您不必在其中使用 data-dojo属性无处不在。您将在 buildRendering 阶段将节点捕获为私有 class 属性,以便您可以将构造函数参数应用到在父实例化期间传递的它们。最后在postCreate()startup()中return最后的DOM,看你是否需要是否专门处理子组件。
  • 事件的概念 http://dojotoolkit.org/reference-guide/1.10/dojo/Evented.html。这就是您需要以编程方式 widgetInstance.on("someEvent", eventHandler)

我在 templateString 的 HTML 标签中使用的唯一自定义属性是 data-dojo-attach-pointdata-dojo-attach-事件。这些非常方便,可以节省大量时间并使数据绑定更不容易出错,自动将小部件的 class 属性与标签中的值连接起来。尽管您也可以使用 innerHTML 以编程方式执行这些操作,但在我看来,繁琐的样板代码数量不值得付出努力。

仔细阅读该教程,如果到最后您不明白什么,请告诉我,我会详细说明(我不是那种只会在 link 上发送提问者而不会费心详细说明的人material).