当前位置 : 主页 > 网页制作 > Dojo >

dojo自定义widget

来源:互联网 收集:自由互联 发布时间:2021-06-15
http://dojotoolkit.org/documentation/tutorials/1.8/recipes/custom_widget/ 目录结构: 最终效果: 关键代码: index.htm !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"htmlhead

http://dojotoolkit.org/documentation/tutorials/1.8/recipes/custom_widget/

目录结构:

最终效果:

关键代码:

index.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/dojo/dojo.js"> </script>
<link href="js/custom/AuthorWidget/css/AuthorWidget.css" rel="stylesheet"/>
<script type="text/javascript">
require(["dojo/request", "dojo/dom", "dojo/_base/array", "custom/AuthorWidget", "dojo/domReady!"],
    function(request, dom, arrayUtil, AuthorWidget){
    // Load up our authors
    var def = request("authors.json", {
        handleAs: "json"
    });
 
    // Once ready, process the authors
    def.then(function(authors){
        // Get a reference to our container
        var authorContainer = dom.byId("authorContainer");
 
        arrayUtil.forEach(authors, function(author){
            // Create our widget and place it
            var widget = new AuthorWidget(author).placeAt(authorContainer);
        });
    });
});
	
</script>
</head>
<body>
	<div id="authorContainer"></div>
</body>
</html>

AuthorWidget.html

<div>
    <h3 data-dojo-attach-point="nameNode">${name}</h3>
    <img class="${baseClass}Avatar" src="" data-dojo-attach-point="avatarNode">
    <p data-dojo-attach-point="bioNode">${!bio}</p>
</div>

AuthorWidget.js

//custom/AuthorWidget.js
define(["dojo/_base/declare","dijit/_WidgetBase", "dijit/_TemplatedMixin", "dojo/text!./AuthorWidget/templates/AuthorWidget.html", "dojo/dom-style", "dojo/_base/fx", "dojo/_base/lang","dojo/on"],
    function(declare, WidgetBase, TemplatedMixin, template, domStyle, baseFx, lang, on){
        return declare([WidgetBase, TemplatedMixin], {
			name: "No Name",
			avatar: require.toUrl("custom/AuthorWidget/images/defaultAvatar.gif"),
			bio: "",
			
			templateString: template,
			baseClass: "authorWidget",
			mouseAnim: null,
			
			baseBackgroundColor: "#fff",
			mouseBackgroundColor: "#def",
			
			postCreate: function(){
			    // Get a DOM node reference for the root of our widget
			    try{
				    var domNode = this.domNode;
				 	
				    // Run any parent postCreate processes - can be done at any point
				    this.inherited(arguments);
				 
				    domStyle.set(domNode, "backgroundColor", this.baseBackgroundColor);
				    
				    //way #1
				    var that = this;
				    on(domNode, "mouseenter", function (e) {
				    	//console.log(this===domNode); //true
				    	//console.log(that); //widget
				        that._changeBackground(that.mouseBackgroundColor);
				    });
				    
				    //way#2
				    on(domNode, "mouseleave", lang.hitch(this, function (e) {
				    	//console.log(this===domNode); //false
				        this._changeBackground(this.baseBackgroundColor);
				    }));
				    
			    }catch(e){
			    	console.log("error:",e);
			    }
			},
			
			_changeBackground: function(toCol) {
			    // If we have an animation, stop it
			    if (this.mouseAnim) { this.mouseAnim.stop(); }
			 
			    // Set up the new animation
			    this.mouseAnim = baseFx.animateProperty({
			        node: this.domNode,
			        properties: {
			            backgroundColor: toCol
			        },
			        onEnd: lang.hitch(this, function() {
			            // Clean up our mouseAnim property
			            this.mouseAnim = null;
			        })
			    }).play();
			},
			_setAvatarAttr: function(av){
				if(av != ""){
					this._set("avatar",av);
					this.avatarNode.src = av;
				}
			}
		});
	}
);

authors.json

[
    {
        "name": "Kitten",
        "avatar": "includes/authors/kitten.jpg",
        "bio": "Brian Arnold is a software engineer at SitePen, Inc., ..."
    },
    {
        "name": "Cyper",
        "avatar": "includes/authors/cyper.jpg",
        "bio": "Cyper is a software engineer at SitePen, Inc., ..."
    },
    {
        "name": "sb",
        "avatar": "includes/authors/sb.gif",
        "bio": "sb is b, ..."
    }
]
网友评论