Top Banner
KISSY [email protected] 2012-06-05 draft KISSY Component API Design
35

KISSY Component API Design

Sep 12, 2014

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: KISSY Component API Design

KISSY

[email protected]

2012-06-05 draft

KISSY Component API Design

Page 2: KISSY Component API Design

KISSY

• Why create component• Why API design• KISSY Component API Design• API Design principles

Outline

docs.kissyui.com | [email protected]

2

Page 4: KISSY Component API Design

KISSY

Components

docs.kissyui.com | [email protected]

4

Page 5: KISSY Component API Design

KISSY

• Ease of development

Why create components

docs.kissyui.com | [email protected]

5

Page 6: KISSY Component API Design

KISSY

• Ease of development

• Reusability

Why create components

docs.kissyui.com | [email protected]

6

Page 7: KISSY Component API Design

KISSY

• Ease of development

• Reusability

•Maintainability

Why create components

docs.kissyui.com | [email protected]

7

Page 8: KISSY Component API Design

KISSY

• Contract between user and developer

Why API Design

docs.kissyui.com | [email protected]

8

Page 9: KISSY Component API Design

KISSY

• Contract between user and developer

• Stable platform to build on

Why API Design

docs.kissyui.com | [email protected]

9

Page 10: KISSY Component API Design

KISSY

• Contract between user and developer

• Stable platform to build on

• Minimize waste• Code-reuse instead of re-writing• Reduce code and complexity

Why API Design

docs.kissyui.com | [email protected]

10

Page 11: KISSY Component API Design

KISSY

• Structure• Subcomponent• Subclass• Plugin• Events

• Lifecycle event• Skin• Creation

Component API Design

docs.kissyui.com | [email protected]

11

Page 12: KISSY Component API Design

KISSY

• Config

• Attribute

• Method

Structure

docs.kissyui.com | [email protected]

12

Page 13: KISSY Component API Design

KISSY

• Config

new Overlay({

width:100,

height:100,

content:'i am overlay'

})

Config

docs.kissyui.com | [email protected]

13

Page 14: KISSY Component API Design

KISSY

• Attribute• Talk to your component

var o=new Overlay({});

o.get("content");

o.set("content","xx");

Attribute

docs.kissyui.com | [email protected]

14

Page 15: KISSY Component API Design

KISSY

• Method• Attribute first, method second

var o=new Tree({});

o.collapseAll();

o.set(“collapsed",true);

Method

docs.kissyui.com | [email protected]

15

Page 16: KISSY Component API Design

KISSY

•Config/Attribute• Children

•Method• addChild/removeChild/removeChildren

Subcomponent

docs.kissyui.com | [email protected]

16

Page 17: KISSY Component API Design

KISSY

•Config/Attribute• Children

var o=new Menu({

children:[{new Menu.Item(){}},{xclass:'menuitem‘, content:'menuitem-

content2'}]

});

o.get("children");

Subcomponent

docs.kissyui.com | [email protected]

17

Page 18: KISSY Component API Design

KISSY

•Method• addChild/removeChild/removeChildren

var o=new Menu({});

o.addChild(new Menu.Item());

Subcomponent

docs.kissyui.com | [email protected]

18

Page 19: KISSY Component API Design

KISSY

• Easy to extend

Subclass

docs.kissyui.com | [email protected]

19

var MyOverlay = Overlay.extend({

initialize:function(){},

createDom:function(){},

renderUI:function(){},

syncUI:function(){}

},{

ATTRS:{

myAttr:{}

}

});

Page 20: KISSY Component API Design

KISSY

• enhance ability dynamically at runtime

Plugin

docs.kissyui.com | [email protected]

20

var editor = new Editor({

plugins:[

FontSize,

new Image({

url:’upload.htm’

})]

});

Page 21: KISSY Component API Design

KISSY

• Event• Native lifecycle event / attrChange event / Custom event

• Method: on / detach

• Config : listeners

{

type:,

target:, // consider bubbling

yy:xx

}

Events

docs.kissyui.com | [email protected]

21

Page 22: KISSY Component API Design

KISSY

• Custom Event

var o = new Overlay({

listeners : { hide : { fn : function(){}}}

});

o.on("show",function(){

});

Events

docs.kissyui.com | [email protected]

22

Page 23: KISSY Component API Design

KISSY

• Lifecycle event• beforeCreateDom/afterCreateDom/beforeRenderUI/afterRenderUI

/beforeBindUI/afterBindUI/..

var o=new Overlay();

o.on("afterCreateDom",function(){

alert(o.get("el"));

});

Events

docs.kissyui.com | [email protected]

23

Page 24: KISSY Component API Design

KISSY

• AttrChange event• beforeAttrChange/afterAttrChangeDom

var o=new Button.Toggle();

o.on("afterCheckedChange",function(){

alert(o.get(“checked"));

});

Events

docs.kissyui.com | [email protected]

24

Page 25: KISSY Component API Design

KISSY

• Config• prefixCls

new Button({

prefixCls:"xx-"

});

Skin

docs.kissyui.com | [email protected]

25

Page 26: KISSY Component API Design

KISSY

• new

• srcNode

• xclass

Creation

docs.kissyui.com | [email protected]

26

Page 27: KISSY Component API Design

KISSY

• new

var m = new Menu();

m.addChild(new Menu.Item());

m.on("click",function(){})

m.render();

Creation

docs.kissyui.com | [email protected]

27

Page 28: KISSY Component API Design

KISSY

• srcNode

Creation

docs.kissyui.com | [email protected]

28

<div class='ks-menu'>

<div class='ks-

menuitem'></div>

</div>

new Menu({

srcNode:div,

listeners:{

click:function(){

}

}

});

Page 29: KISSY Component API Design

KISSY

• xclass

Creation

docs.kissyui.com | [email protected]

29

new Menu({

children:[{

xclass:'menuitem',

content:'yy'

}],

render:container,

listeners:{

click:function(){}

}});

Page 30: KISSY Component API Design

KISSY

• Hide implementation

new Overlay({

// view: new OverlayRender()

});

API Design Principle

docs.kissyui.com | [email protected]

30

Page 31: KISSY Component API Design

KISSY

• Easy to learn• consistency

• simple

• elCls/el/srcNode/get()/set()

API Design Principle

docs.kissyui.com | [email protected]

31

Page 32: KISSY Component API Design

KISSY

• Easy to read and write

new Overlay({

width:,

height:'',

children:[{

xclass:'menu'

}]});

API Design Principle

docs.kissyui.com | [email protected]

32

Page 33: KISSY Component API Design

KISSY

• Easy to extend

var MyOverlay = Overlay.extend(…);

API Design Principle

docs.kissyui.com | [email protected]

33

Page 34: KISSY Component API Design

KISSY

• make api complete• separate concern

• new/addChild/removeChild/destroy/on/detach

API Design Principle

docs.kissyui.com | [email protected]

34

Page 35: KISSY Component API Design

KISSY

SEE YOU SOON!

THANKS FOR COMING