首先理解下dojo.declare
Dojo类的定义方式如:dojo.declare("myclass",null,{});理解该类的定义请先理解基于原型的继承方式。
dojo.declare提供了另外两个函数:preamble和postScript。其中,preamble在
constructor之前执行,而postScript在constructor 之后执行。
preamble主要用于处理超类的参数。postScript主要用于触发部件的创建过程。
重点来了,理解dijit._Widget、dijit._Templated
_Widget:
preamble:它为在constructor接收到参数之前处理参数提供了机会。意思就是正常情况下传入constructor中的参数都会传入preamble中。而且,无论preamble返回什么,其返回的结果都会传递给constructor。
constructor:
postMixInProperties:这个方法会在dojo处理继承关系并向子类中混入所有基类属性时被调用。即,当这个方法执行时,子类已经可以访问所有继承的属性,并在部件出现在屏幕上之前操作这些属性。你可以来修改或派生模板标记中的占位符($(property))的恰当位置
buildRendering:它用来将内部的_Widget.domNode属性设置为一个实际的DOM节点,以便部件真正成为页面的一部分。(postMixInProperties才是修改部件模板的恰当位置)。
在它执行完后,部件本身会立即被添加到dojo的部件管理对象,从而保证部件能在明确调用
destroyRecursive来\页面卸载时被适当销毁。
postCreate: 它在部件已经创建完成并且出现在页面上时执行。通过postMixInProperties执行哪些影响部件样式或在屏幕上位置的操作时务必多加小心,因为这些操作是在部件可见之前发生的。但是postCreate中执行类似的操作有时又会导致页面短暂地‘闪烁’,因为这个方法操作时已经可见的部件。如果一个部件中包含子部件,那么在这个方法中访问子部件也不安全。要想安全地访问子部件,应该使用另外一个生命周期方法startup。如果要安全地访问非子部件,那么必须等到页面加载之后使用dojo.addOnLoad
startup: 它在当前部件及所有子部件都创建完成后被自动调用。因此,该方法是子部件可以安全地引用其他子部件的可靠位置。(在postCreate中尝试引用子部件会导致不一致的行为,且查找原因和解决问题也很困难)。对于通过编程方式的部件,并且该部件包含其他关系的子部件,需要在所有子部件都创建完毕后手动调用startup. 这个方法是在部件创建期间用于加入自定义行为的最后一个可以重写的方法。
顺序:preamble->constructor->postMixInProperties-->buildRendering>postCreate->startup
分享到:
相关推荐
5个例子,为: 基础树 后台读取 分级 拖曳 数据库读取并存储 有些例子是基于 php 的
Dojo学习笔记--dijit.TitlePane Dojo学习笔记--dijit.Tooltip Dojo学习笔记--dijit.Tree Dojo学习笔记--dojo.graphics.color & dojo.uri.Uri Dojo学习笔记--dojo.string & dojo.lang Dojo学习笔记--动态生成...
要使树具有拖放功能,仅仅需要设置dndController属性(dijit._tree.dndSource已废弃): 要限制拖放的行为,仅仅需要实现checkAcceptance或checkItemAcceptance处理函数即可: 以上已经实现了树的拖放功能了! ...
分三个包上传时,第三个包好像传不上去,我给整合了一下,打在一个包里上传了! dojo精品中文教程 Dojo.1.0 Practice Note [1] 什么是dojo 选择dojo的理由 AJAX架构之Dojo篇 Adding Ajax中文版 (DoJo) DOJO...
Dojo学习笔记--dijit.TitlePane Dojo学习笔记--dijit.Tooltip Dojo学习笔记--dijit.Tree Dojo学习笔记--dojo.graphics.color & dojo.uri.Uri Dojo学习笔记--dojo.string & dojo.lang Dojo学习笔记--动态生成...
Dojo学习笔记--dijit.TitlePane Dojo学习笔记--dijit.Tooltip Dojo学习笔记--dijit.Tree Dojo学习笔记--dojo.graphics.color & dojo.uri.Uri Dojo学习笔记--dojo.string & dojo.lang Dojo学习笔记--动态生成...
如何使用dojo的digit组件, dojo.require("dijit.layout.ContentPane"); dojo.require("dijit.layout.TabContainer"); dojo.require("dijit.form.ValidationTextBox"); dojo.require("dijit.form.DateTextBox");
Extract files from the download locally or on a web server. Include ...Browse to dojo/tests/runTests.html or dijit/themes/themeTester.html to see Dojo in action
利用dojo的ajax实现树结构,带有checkbox功能
var conMenu=dijit.byId("GOOGLEMAP_menu_"+fieldId); if(menCon!=null && conMenu!=undefined){ conMenu.destroy(); //摧毁菜单 map.getPane(G_MAP_FLOAT_PANE).removeChild(menCon); } //在...
小部件配置将widget 配置对象添加到viewer.js 中的widgets 对象。 widgets : { ... renderer : { include : true , id : 'renderer' , type : 'titlePane' , canFloat : false , path : 'gis/dijit/Renderer' , ...
只需创建一个模板化对象和一个模板(查看测试以获取想法)并调用 Mizuhiki.render。 一个有效的模板可能如下所示(取自测试): < input type =" text " value =" {{Text}} " data-dojo-type =" dijit.form...
1.由于Dojo的每一个版本变化都比较大。 2.Dojo更新都比较快,基本上是1–2个月一个新的版本。 3.Dojo有很多不完善的地方,在实际应用中如果... 例如: dijit.form.Button 我们想在这个基础上定制一个只显示Icon的Butt
dojo dijit 小部件开发,将两个 Button 和一个 FilteringSelect 进行组合构成一个新的部件,便于开发部署,减少代码量.
dijit-分页-js 0.2 用于分页的 Dijit 描述 这个 Dojo 小部件在您选择的 DOM 元素中呈现一个分页列表,以便您可以轻松地对结果进行分页。 入门 将 dojo 配置添加到您的 HTML 头中 < script > // host path ...
arcgis-dijit-locate-button-js特征一个简单的 dijit 按钮,点击后使用 HTML5 Geolocation(如果可用)导航到用户当前位置。指示基本使用 var myWidget = new locateButton({ map: myMap,}, "locateButton");...
arcgis-dijit-home-button-js特征单击时,一个简单的 dijit 按钮将返回到地图的默认范围。指示基本使用 var myWidget = new homeButton({ map: myMap,}, "homeButton");myWidget.startup();所有选项 var myWidget = ...
Dojo开发包: 包含以下目录dijit dojo dojox util
一个节点模块,它通过确定某个依赖项是否是WAB小部件并且应放置在/widgets目录中,还是应该放入另一个依赖项(即第三方库,dojo dijit),来帮助Web Appbuilder项目进行依赖项管理。 /libs 。 当前实现为一组文件...
Dijit ProgressBar Tests. Test 1. Progress Value Max Progress Value. Test 2. Write here: Small, without text and background image: Show decimal place: Test 3 ...