首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于dojo/dijit/dojox的问题

关于dojo/dijit/dojox的问题
EN

Stack Overflow用户
提问于 2016-10-17 13:23:26
回答 2查看 421关注 0票数 1

我正在学习dojo来开发一个简单的应用程序,以供移动客户端使用。我看到一些小部件在dojox/mobile/*dijit/form/*之间有不同的特性。例如,ComboBox from dijit具有一个属性来选择Memory存储使用(searchAttrb)的哪个字段,而来自dojox的字段没有:

https://dojotoolkit.org/reference-guide/1.10/dojox/mobile/ComboBox.html

https://dojotoolkit.org/reference-guide/1.10/dijit/form/ComboBox.html

  1. 第一个问题:您会推荐将在智能手机上使用的应用程序使用dijit小部件吗?
  2. 我知道dojo/domReady!是什么意思。但我不确定是否也必须在嵌套需求中使用它。示例: 要求(“dojo/request/xhr”、"dojo/json“、"dojo/domReady!”)、函数(xhr、JSON) { xhr("api/dummy“、{ handleAs:"json”}).then(函数(数据){ require("dojo/store/Memory“、"dijit/form/ComboBox”、"dojo/domReady!“)、函数(内存)ComboBox) { var mystore =新内存({ data: data });var comboBox =新ComboBox({ id:"idCombo",名称:"blabla",存储: mystore,searchAttr:"field“},"idCombo").startup();};},函数(err) { console.log(err);};};

这个片段提取服务器上的一个文件并创建Memory存储。然后使用字段“字段”填充ComboBox。是否需要内部dojo/domReady!?我想不是,因为只有在执行外部函数之后才能到达该代码。

  1. 我看到很多dojo示例都是以不同的方式编写的。有些人在dojo之后声明所有需要的项,包括。另一些则只需要功能所需的项目,逐项功能。有什么不同吗?

示例

FormControls.html?theme=Custom

将所有项一起声明,并且没有关联的函数,因此没有名称:

代码语言:javascript
运行
复制
<script type="text/javascript" src="../../../dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true"></script>

<script type="text/javascript">
    require([
        "dojox/mobile",
        "dojox/mobile/parser",
        "dojox/mobile/compat",
        "dojox/mobile/Button",
        "dojox/mobile/CheckBox",
        "dojox/mobile/ComboBox",
        "dojox/mobile/RadioButton",
        "dojox/mobile/Slider",
        "dojox/mobile/TextBox",
        "dojox/mobile/SearchBox",
        "dojox/mobile/ExpandingTextArea",
        "dojox/mobile/ToggleButton"
    ]);

在此期间:

https://dojotoolkit.org/documentation/tutorials/1.10/checkboxes/demo/CheckBox.html

require指令后面跟着一个函数:

代码语言:javascript
运行
复制
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js" data-dojo-config="isDebug: 1, async: 1, parseOnLoad: 1"></script>
<script>                
    require(["dijit/form/CheckBox", "dojo/parser", "dojo/domReady!"], function(CheckBox, parser) {

当然,它们应该有不同的含义和用例,但我不确定要理解哪一个。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-17 18:48:48

关于问题01

dojox/mobile/*提供了可用于为移动设备构建基于web的应用程序的小部件。

dojox/mobile/*中的小部件被设计成尽可能轻量级,并特别关注移动体验。

在使用dojox/mobile/*构建移动设备时,可以排除许多依赖项,因为它们对dojo的依赖性较小。

如果您的目标低端设备使用dijit更多的套件桌面应用程序,我建议使用这些小部件。

关于问题02

dojo/domReady!在内部require中并不是必需的。

关于问题03:

在dojo中,您可以通过两种方式声明小部件,即以声明方式或以编程方式声明。

通过声明性方法,您可以在HTML中启动小部件,并使用dojo/parser连接框架提供的JavaScript行为。

请注意data-dojo-type中的数据属性

示例:

代码语言:javascript
运行
复制
<button type="button" id="myButton" data-dojo-type="dijit/form/Button">
    <span>Click Me!</span>
</button>
<script type="text/javascript" src="lib/dojo/dojo.js"
    data-dojo-config="async: true"></script>
<script type="text/javascript">
    require(["dojo/parser", "dijit/form/Button", "dojo/domReady!"],
    function(parser){
        parser.parse();
    });
</script>

使用一种编程方法,您可以完全使用JS,并在HTML中只添加一个“占位符”,其中小部件将被钩住/创建。

请注意,HTML中没有数据属性data-dojo-type

示例:

代码语言:javascript
运行
复制
require(["dijit/form/Button", "dojo/dom", "dojo/domReady!"], function(Button, dom){
    // Create a button programmatically:
    var myButton = new Button({
        label: "Click me!",
        onClick: function(){
            // Do something:
            dom.byId("result1").innerHTML += "Thank you! ";
        }
    }, "progButtonNode").startup();
});
<button id="progButtonNode" type="button"></button>
<div id="result1"></div>

在我的个人经验中,我多次看到一种适合简单小部件场景的声明式方法的使用,主要是在HTML中创建的,服务器端脚本添加了“香料”HTML。对于一个更复杂的SPA JavaScript应用程序,一种更程序化的方法。

票数 2
EN

Stack Overflow用户

发布于 2016-10-18 08:03:20

就像GibboK已经涵盖了1和2一样,我将选择3!

在我开始之前,有很多不同的方法来使用dojo库,老实说,我不确定是否有错误的方法。

我使用过不同的结构,这实际上取决于您在做什么,我所做的大多数应用程序都强调代码重用,所以我倾向于只定义脚本所需的内容。

而不是

代码语言:javascript
运行
复制
<script type="text/javascript">
    require([
        "dojox/mobile",
        "dojox/mobile/parser",
        "dojox/mobile/compat",
        "dojox/mobile/Button",
        "dojox/mobile/CheckBox",
        "dojox/mobile/ComboBox",
        "dojox/mobile/RadioButton",
        "dojox/mobile/Slider",
        "dojox/mobile/TextBox",
        "dojox/mobile/SearchBox",
        "dojox/mobile/ExpandingTextArea",
        "dojox/mobile/ToggleButton"
    ]);

我倾向于独立地引入我的模块并传递任何全局对象,我也使用dojo/_base/declare --任何我将使用dojoConfig并将脚本作为包引用的定制模块。

代码语言:javascript
运行
复制
var dojoConfig = {
    packages: [
        { name: "my", location: "../my" },
        { name: "package2", location: "/js/package2" }
    ]
};

因此,我首先用构造函数定义一个person对象,它以2个值为例。

代码语言:javascript
运行
复制
// in "my/Person.js"
define(["dojo/_base/declare", "dojo/_base/lang"],
  function(declare, lang) {
    return new declare("person", null, {
      fistName: null,
      lastName: null,

      constructor: function(firstName, lastName) {
        this.firstName = firstName;
        this.LastName = lastName;
      },
      getFullName: function() {
        return this.firstName + " "
        this.lastName;
      },
      changeLastName: function(lastName) {
        this.lastName = lastName;
      }
    });
  });
代码语言:javascript
运行
复制
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js"></script>

然后,我将使用引用文件夹dojoConfig的../my并创建一个传入2个值的新person对象。

代码语言:javascript
运行
复制
define(["dojo/_base/declare", "my/person"],
      function(declare, person) {
        return declare("admin", null, {
          person: null,

          constructor: function() {
            this.person = new person("Jon","Doe");
          },
          fullName: function() {
            console.log(this.person.getFullName);
          },
        });
  });

我不确定这是否能回答你所有的问题

http://dojotoolkit.org/documentation/tutorials/1.10/modules/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40087597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档