我正在学习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
dijit小部件吗?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!?我想不是,因为只有在执行外部函数之后才能到达该代码。
dojo示例都是以不同的方式编写的。有些人在dojo之后声明所有需要的项,包括。另一些则只需要功能所需的项目,逐项功能。有什么不同吗?示例
FormControls.html?theme=Custom
将所有项一起声明,并且没有关联的函数,因此没有名称:
<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指令后面跟着一个函数:
<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) {当然,它们应该有不同的含义和用例,但我不确定要理解哪一个。
发布于 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中的数据属性
示例:
<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。
示例:
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应用程序,一种更程序化的方法。
发布于 2016-10-18 08:03:20
就像GibboK已经涵盖了1和2一样,我将选择3!
在我开始之前,有很多不同的方法来使用dojo库,老实说,我不确定是否有错误的方法。
我使用过不同的结构,这实际上取决于您在做什么,我所做的大多数应用程序都强调代码重用,所以我倾向于只定义脚本所需的内容。
而不是
<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并将脚本作为包引用的定制模块。
var dojoConfig = {
packages: [
{ name: "my", location: "../my" },
{ name: "package2", location: "/js/package2" }
]
};因此,我首先用构造函数定义一个person对象,它以2个值为例。
// 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;
}
});
});<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.8/dojo/dojo.js"></script>
然后,我将使用引用文件夹dojoConfig的../my并创建一个传入2个值的新person对象。
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/
https://stackoverflow.com/questions/40087597
复制相似问题