ã¿ãªããããã«ã¡ã¯ã 仿¥ã9æ28æ¥ã¯ãMatryoshkaãªããžããªãžã®æåã®ã³ããããã2幎ãè¿ããŸãã ãã®ããããã®æç¹ã§ãJavaScriptéçºè
ïŒãããªã§ãŒã·ã«ããã¬ãŒã ã¯ãŒã¯ãšããŠäœ¿çšããããªã人ã«ãšã£ãŠãïŒã®ããããçš®é¡ã®ç¹å
žãåããæ°ãããªãªãŒã¹ãå°çããŸããã
ãããªã§ãŒã·ã«ã¯ãã¢ã¯ã»ãµãŒã«åºã¥ãJavaScriptãã¬ãŒã ã¯ãŒã¯ïŒãŸãã¯å¿
èŠã«å¿ããŠã©ã€ãã©ãªãŒïŒã§ããããããããäžç®ã§ä¿¡ããããªãã»ã©ã®å¯èœæ§ãçµãåºããŸãã ã²ãã¿ãŒãšã»ãã¿ãŒãJavaScriptã«ç»å Žãããšãã®ããšãèŠããŠããŸããïŒ åšå²ã®éšé³ã¯ã©ããããã§ããã...èšäºãäŒè©±...ãããŠããã¹ãŠãèœã¡çããŸãããå€ãã®äººã¯ãç°¡åãªäŸãé€ããŠããããã®æ©äŒã®äœ¿ãæ¹ãçè§£ããŠããŸããã§ããã ãããªã§ãŒã·ã«ã¯ãJavaScriptã§ã¢ã¯ã»ãµãŒãå¿
èŠãªçç±ã®è³ªåã«å¯Ÿããåªããåçã§ãã
äŒçµ±çã«ããã®ãã¬ãŒã ã¯ãŒã¯ãå°ããªã³ãŒãã®å©ããåããŠäœãã§ããããæãåºãããŠãã ããã
以åã¯ãããããã§ããŸããã§ããã
ãããè¡ãããšãã§ããŸãïŒ
var object = {};
ChromeãšNodeJSã®ææ°ããŒãžã§ã³ãæçµçã«ES6æ§æã®ã»ãšãã©ã®èŠçŽ ããµããŒããå§ãããšããäºå®ã«ããããã®æçš¿ã®ä»¥äžã®äŸã¯ãã¹ãŠES6ã§èšè¿°ãããŸãã ãã®ãããªç°¡åãªæ¹æ³ã§ããããã®é©æ°ãä¿¡ããããªãã»ã©ã¯ãŒã«ã ãšèããŠãããã¹ãŠã®äººãç¥çŠãããããã«ç²ŸéããŠããªã人ã®ããã«ES.nextã«æ³šç®ãéããããšæããŸãã
ãã€ãã£ããªããžã§ã¯ãã®ãµããŒã
æãéèŠãªé©æ°ã¯ããããªã§ãŒã·ã«ã«ããä»»æã®ãªããžã§ã¯ãã®ãµããŒãã§ããã ã¯ããã¯ãããã€ã³ãã£ã³ã°ã宣èšããããä»ã®ã¯ãŒã«ãªããšããããããããã«ããããªã§ãŒã·ã«ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããå¿
èŠã¯ãããŸããã
let object = {};
ãã®äŸãããããããã«ãæ°ããéçã¡ãœããã¯åçã¡ãœãããå®å
šã«ç¹°ãè¿ããŸãããããããªéãããããŸããå
ã®ãªããžã§ã¯ããæåã®åŒæ°ãšããŠæž¡ãå¿
èŠããããŸãã
ããã«ãããèªäœãã¬ã³ããªã³ã°ã§ããã³ã¬ã¯ã·ã§ã³ã§ã¯ã Matreshkaã¯ã©ã¹ããç¶æ¿ãããŠããã¢ãã«ãæå®ããå¿
èŠããªããªããŸããã
class MyArray extends MK.Array { itemRenderer() { return '<li>'; } constructor() { super().bindNode('sandbox', '.some-node'); } } let arr = new MyArr(); arr.push(someData);
æ°ããéçã¡ãœããã®å®å
šãªãªã¹ãã¯ã MatreshkaMagicã»ã¯ã·ã§ã³ã«ãªã¹ããããŠããŸãã
ãã€ãã£ããªããžã§ã¯ãã®ãµããŒãã®ãããã§ããã¹ãŠã®ãããžãã¯ã颿°ãã Matreshka ã Matreshka.Array ã Matreshka.Objectã¯ã©ã¹ããã³Class颿°ãå«ãŸãªããããã³ã³ãã¯ããªå¥ã®ã©ã€ãã©ãªã«åã蟌ãããšãå¯èœã«ãªããŸããã éçºè
ã¯ã MatreshkaMagic
ãªããžã§ã¯ããŸãã¯Matreshka
ã¯ã©ã¹ã®ãã¹ãŠã®éçã¡ãœãããå«ãçãããŒãžã§ã³ã®magic
ã¢ã¯ã»ã¹ã§ããŸãã
ã©ã€ãã©ãªã¯magic / repositoryãã©ã«ããŒã«ãããŸãã
magic.bindNode(object, 'x', '.my-node'); magic.linkProps(object, 'y', 'x z', (x, z) => x + z);
ã©ã€ãã©ãªãŒã®è©³çްã«ã€ããŠã¯ãããã¥ã¡ã³ããåç
§ããŠãã ãã ã
ããã£ãŒããã€ã³ãã£ã³ã°ã
ãã€ãã£ããªããžã§ã¯ãã®ãµããŒãã«ããç»å Žãããã1ã€ã®ã¯ãŒã«ãªæ©èœã¯ãããããããã£ãŒããã€ã³ãã£ã³ã°ãã§ãã ä»»æã®ãã¹ãã®ãªããžã§ã¯ãã䜿çšãããšãDOMããŒãããªããžã§ã¯ãã®æ·±éšã®ä»»æã®ããããã£ã«é¢é£ä»ããããšãã§ããŸãã
this.a = {b: {c: {d: 41}}} this.bindNode('abcd', '.my-node');
Matryoshkaã«ãŒãã«ã¯ãªããžã§ã¯ãã®ãã©ã³ãå
šäœãç£èŠãããã©ã³ãå
ã®ãªããžã§ã¯ãã®1ã€ãåå®çŸ©ãããå Žåã«ãã€ã³ãã£ã³ã°ãåã€ã³ã¹ããŒã«ããŸã
this.ab = {c: {d: 42}};
ãã£ãŒããªã³ã¯
ãããªã§ãŒã·ã«ã«ã¯é·ãélinkPropsã¡ãœãããå«ãŸããŠãããããäžéšã®ããããã£ã®äŸåé¢ä¿ãä»ã®ããããã£ã«èšå®ã§ããŸãã
ç¬èªã®ããããã£ãžã®äŸåãèšå®ã§ããŸãã
this.linkProps('a', 'bc d', (b, c, d) => b + c + d); this.b = 1; this.c = 2; this.d = 3; alert(this.a);
ä»ã®ãªããžã§ã¯ãã®ããããã£ãžã®äŸåãèšå®ã§ããŸãã
this.linkProps('a', [ externalObject, 'b', externalObject2, 'c', this, 'd' ]); externalObject.b = 1; externalObject2.c = 2; this.d = 3; alert(this.a);
linkProps
ã¯ãããããã£ãã¹ã®æå®ããµããŒãããããã«ãªããŸããã
this.linkProps('a', 'bcd e.f', (d, f) => d + f); this.b = {c: {d: 40}}; this.e = {f: 2}; alert(this.a);
ããããã£ãžã®ãã¹ã®ãã§ãŒã³ã§äœãã倿Žããããšããããªã§ãŒã·ã«ã¯ãã®å€æŽãã€ã³ã¿ãŒã»ããããå€ããµããã§ãŒã³ãšã®æ¥ç¶ãåæããæ°ãããã§ãŒã³ãžã®äŸåé¢ä¿ãäœæããŸãã
this.bc = {d: 1};
åãšåæ§ã«ãä»ã®ãªããžã§ã¯ãã®ããããã£ãžã®äŸåé¢ä¿ãäœæã§ããŸãããŸããåè¿°ã®ããã«ãã©ã®ãªããžã§ã¯ãããœãŒã¹ãªããžã§ã¯ããšããŠæ©èœã§ããŸãã
let targetObject = {}, o1 = {b: {c: {d: 40}}}, o2 = {e: {f: 2}}; MK.linkProps(targetObject, 'a', [ o1, 'bcd', o2, 'ef' ], (d, f) => d + f); alert(targetObject.a);
å§ä»»ãããã€ãã³ãã®ééçãªæ§æ
以åã®ããŒãžã§ã³ã§ã¯ãçŸåšã®ãªããžã§ã¯ãïŒ this
ïŒã ãã§ãªããä»»æã®ãã¹ãã®ãªããžã§ã¯ãã§ãã€ãã³ãããã³ã°ãããããšãå¯èœã§ããããšãæãåºããŠãã ããã ããããæ§æã¯è²§åŒ±ã§ããã å°ããªäŸãæããŸãã ãããªã§ãŒã·ã«ã®ã€ã³ã¹ã¿ã³ã¹ã«ã¯ããã€ãã®ããããã£ãããããããã¹ãã§ãããããããããªã§ãŒã·ã«ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããšããŸãã
this.a = new Matreshka();
ããããã£ãå²ãåœãŠãåãŸãã¯åŸã«ããã®ããããã£ã«é¢é£ããã€ãã³ãã®ãã³ãã©ãäœæã§ããŸãã ãã®ããã«ããç¬ããå«ãæ§æã䜿çšãããŸããã
this.on('a@someevent', handler); this.a.trigger('someevent');
é
åãšãªããžã§ã¯ã ïŒãããªã§ãŒã·ã«ã§ã¯ããŒãšå€ã®ã³ã¬ã¯ã·ã§ã³ïŒã®å Žåãã€ãã³ãã¯ã³ã¬ã¯ã·ã§ã³ã«å«ãŸãããã¹ãŠã®èŠçŽ ã§ãªãã¹ã³ããããããã¿ãŒã²ããããããã£ãæå®ããªãããšãã§ããŸããã
this.on('@someevent', handler); this.push(new Matreshka()); this[0].trigger('someevent');
äžèŠã·ã³ãã«ã«èŠããŸãã ãããããªããžã§ã¯ãã®ããªãŒãããå°ãè€éãªå Žåã¯ã©ãã§ããããïŒ ããšãã°ãããããã£"a"
ã«ã¯ã³ã¬ã¯ã·ã§ã³ãå«ãŸããŸãã
this.a = new MK.Array(); this.a.push(new Matreshka());
ãã®ãããªã³ã¬ã¯ã·ã§ã³å
ã§ã€ãã³ãããã£ããããæ¹æ³ã¯ïŒ ããªããžã§ã¯ãå
"a"
ã€ãã³ã"a"
ãã£ãããã"@someevent"
->ã€ãã³ãããã£ããããé
åã®èŠçŽ å
ã®"@someevent"
ãšãã2ã€ã®ç¬ãçµã¿åãããããšãã§ããŸãã
this.on('a@@someevent', handler); this.a[0].trigger('someevent');
ããã¯ãŸã çµéšã§ããŸãïŒååãªã³ãŒããŒã飲ãå ŽåïŒã ãããããã£ãšæ·±ããããå Žåã¯ã©ãã§ããããïŒ ãã®åŸããç¬ãã®æ°ãå¢å ããã³ãŒããŒã¯ãã¯ã圹ã«ç«ã¡ãŸãã...
åæããŠããã®æ©èœã®å¯èœæ§ã¯éåžžã«å€§ããã§ãã å
¥ãåã®ããŒã¿ã€ãã³ãããªãã¹ã³ã§ããŸããããšãã°ãé
åã®é
åã«å«ãŸãããªããžã§ã¯ãã®ããããã£ã®å€æŽãªã©ãåŠç¿ã§ããŸãããããã£ãŠãããªã²ãŒããããã€ãã³ãã®æ§æããããã«å€æŽããããšã«ããŸããã ãDoggieãã¯æ®ããŸãããããªããžã§ã¯ããžã®ãã¹ãšã€ãã³ãã®ååã®å¯äžã®åºåããšããŠã ã€ãã³ãããã¹ãããããªããžã§ã¯ãã«è§Šãããšãç¬ã¯ãããã«çœ®ãæããããŸãã é¡ã®ãªãç¬ã§ã¯ãªããã³ã¬ã¯ã·ã§ã³å
ã®äœãã«ã€ããŠç¥ãããå Žåã¯ãã¢ã¹ã¿ãªã¹ã¯ã䜿çšããŸãã ããã§ãããã€ã忢ããå¿
èŠããããŸãã
ãã³ãã©ãŒãããããã£""
ã«ã¢ã¿ããããå Žåãæ§æã¯åããŸãŸã§ãã
this.on('a@someevent', handler);
ã³ã¬ã¯ã·ã§ã³ã¢ã€ãã ã§ã€ãã³ãããã£ããããå Žåã¯ã次ã®ä»£ããã«ïŒ
this.on('@someevent', handler);
ãã®ããã«æžããŸãïŒ
this.on('*@someevent', handler);
ã¢ã¹ã¿ãªã¹ã¯ã¯ãã MK.Objectã®ããŒã¿ãåŠçãããããã㣠ããŸãã¯ã MK.Arrayã³ã¬ã¯ã·ã§ã³ã®ä»»æã®èŠçŽ ããæå³ããŸãã
ãã£ãšæ·±ãè¡ããŸãã äžèšã®æ¬¡ã®äŸãçµã¿åãããå¿
èŠããããŸãã
this.on('a@@someevent', handler);
次ã®ããã«æžããŸãïŒ
this.on('a.*@someevent', handler);
æ§æã¯ãã£ãšç°¡æœã§ãã ãªããžã§ã¯ãã®ãã¹ãæå®ããå¿
èŠãããã®ã¯ã@ã®åãšãã€ãã³ãã®ååãæå®ããåŸã§ãã
ã€ãã³ãã«é¢ãã詳现ãªèšäºã
setClassFor
setClassForã¯ããã1ã€ã®éåžžã«åªããæ©èœã§ãã äžããããããããã£ãã¯ã©ã¹ã®ã©ã®ã€ã³ã¹ã¿ã³ã¹ã§ãããã瀺ããŸãã ããããã£ãäžæžãããããšãããšãå
éšã€ã³ã¿ãŒã»ãã¿ãŒã¯å²ãåœãŠãããã®ã§ã¯ãªããæ°ããããŒã¿ã§æŽæ°ããŸãã äŸãèŠãŠã¿ãŸãããã
ãªããžã§ã¯ãã®æ·±ãæ§é ãããã setClassFor
ããã¹ãããããªããžã§ã¯ãã§å®è¡ãããŠããå Žåãè峿·±ãããšãã§ããŸãã ããšãã°ãéå±€åãããããŒã¿ã®ãã¬ãŒã³ããŒã·ã§ã³ãããŒã«ã«ã¹ãã¬ãŒãžã«ä¿åããŸãã
localStorage.x = JSON.stringify(this.x);
ãããŠãéæ³ã®æã®æ³¢ã§ãããã埩å
ããŸãã
this.x = JSON.parse(localStorage.x);
ãŸãã¯ããµãŒããŒã«è¡ãæ¥ããŸãã
ãã®ãããªããžãã¯ãå¿
èŠã«ãªãå¯èœæ§ãããä¿¡ããããªãã»ã©å€ãã®ã±ãŒã¹ããããŸãã å¥ã®äŸãšããŠãããã¥ã¡ã³ãã®ã³ãŒãã瀺ããŸãïŒç°¡æœã«ããããã«ãECMAScript 7ã®ã¯ã©ã¹ããããã£ã䜿çšããŸãïŒã
ã¡ãœããã®ããã¥ã¡ã³ãã®è©³çްã
DOMãã³ãã¬ãŒããšã³ãžã³
Matryoshkaã¯ãããžãã¯ãHTMLã³ãŒãã§èšè¿°ããããšã匷å¶ããMVVMãã¿ãŒã³ãå®è£
ãããã¬ãŒã ã¯ãŒã¯ãšã¯å¯Ÿç
§çã«ãJSãã¡ã€ã«ã«ããžãã¯ãå«ããã¹ãã ãšããèããå
¬èšãããã¬ãŒã ã¯ãŒã¯ã§ãã
JSãã¡ã€ã«ã«ããžãã¯ãå®è£
ããããšã¯éåžžã«äŸ¿å©ã§ãã ãã ãããã¹ãŠã®ãã€ã³ãã£ã³ã°ã®èšè¿°ãã³ãŒãã®è¡æ°ã®èгç¹ããã³ã¹ããããããããå Žåã«ãç¶æ³ãçºçããããšããããŸãã
ãã®ãããDOMãã³ãã¬ãŒããšã³ãžã³ãæ¹åããã³é«éåããããšã決å®ãããŸãããããã¯æè¿ãŸã§å
¬åŒAPIã«ã¯ãããŸããã§ããã 圌ã¯äœãããŠããŸããïŒ DOMããŒããDOMããŒãã®ã³ã¬ã¯ã·ã§ã³ãHTMLã³ãŒãããŸãã¯çŸåšã®ãªããžã§ã¯ãã®ãµã³ãããã¯ã¹ãåãåãããããè§£æããŠã {{KEY}}
ãããªè§ã®ãããªæ§é ãèŠã€ãããããã®æ§é ãèŠã€ãã£ããã€ã³ãã£ã³ã°ãäœæããŸãã
<a href="http://{{website.domain}}/{{category}}/{{page}}">Look at the {{info.title}}</a>
this.parseBindings(); this.website.domain = 'example.com'; this.category = 'foo'; this.page = 42; this.info.title = 'cool stuff';
ãã®æ¹æ³ã®è©³çްã«ã€ããŠã¯ãããã¥ã¡ã³ããåç
§ããŠãã ãã ã
ãã®æ¹æ³ã¯ããã³ãã¬ãŒãã«ããžãã¯ïŒã«ãŒããæ¡ä»¶ããã³ãã©ãŒïŒããªãããããããªã§ãŒã·ã«ã®ã€ããªãã®ãŒãšççŸããŸããã
ã¡ãœããèªäœã®APIã®å
¬éã«å ããŠãã³ã¬ã¯ã·ã§ã³ã®ãã³ãã¬ãŒããšã³ãžã³ãããã©ã«ãã§æå¹ã«ãªããŸããïŒ useBindingsParser: true
ãèšè¿°ããå¿
èŠã¯ãªããªããŸããïŒã
class MyArray extends MK.Array { itemRenderer = '<span>Hello, {{name}}</span>'; ... }
ECMAScript 2015ã®ãããªãç ç³
setClassFor
äŸã¯ãã¡ãœãããsuper()
çŽåŸã«èµ·åãããããšã瀺ããŠããŸãã ãã®å¯èœæ§ã¯ãéåžžã«ç°¡åãªå€æŽã®ãããã§å®çŸããŸããã3ã€ã®ã³ã³ã¹ãã©ã¯ã¿ãŒïŒ Matreshka
ã Matreshka.Array
ã Matreshka.Object
ïŒã¯Matreshka.Array
ã undefined
ã§ã¯ãªãMatreshka.Object
è¿ããŸãã
class MyObject extends MK.Object { constructor(data) { super(data) .bindNode('x', '.my-node'); } }
on ã once ã onDebounceã¡ãœããã§ã®ã€ãã³ãåãªããžã§ã¯ãã®ãµããŒã
以åã®ããŒãžã§ã³ã§ã¯ãéçºè
ã¯ã€ãã³ããã³ãã©ãŒã宣èšããããã®å¯äžã®æ§æã䜿çšã§ããŸããã
this.on('eventname1', handler1); this.on('eventname2', handler2);
ããã§ãé©åãªã¡ãœããã1åã ãåŒã³åºãããšã§ãè€æ°ã®ãã³ãã©ãŒã宣èšã§ããŸãã
this.on({ 'eventname1': handler1, 'eventname2': handler2 });
ãã®èšäºã§ã¯ããã®ãã¥ãŒã¹ã«ã€ããŠã¯èšåããŠããŸããããECMAScript 2015ã䜿çšãããšããã€ã¯ãã¿ã¹ã¯ã®ã³ãŒãã倧å¹
ã«ççž®ã§ããŸãã
this.on({ 'eventname1': evt => this.x = 42, 'eventname2': evt => doSomethingElse() });
ãå€ããæ§æã«å¯ŸããŠïŒ
this.on({ 'eventname1': function(evt) { this.x = 42 }, 'eventname2': function(evt) { doSomethingElse(); } });
itemRenderer
ã¯ãã³ã¬ã¯ã·ã§ã³ã®èŠçŽ ãæç»ããæ¹æ³ã«ã€ããŠèª¬æããã³ã¬ã¯ã·ã§ã³ïŒ Matreshka.Array
ïŒã®ä»®æ³ããããã£ã§ãã
詳现ã«ã€ããŠã¯ãitemRendererã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
æ°ããããŒãžã§ã³ããã itemRenderer
ãªãŒããŒã©ã€ããããšãã³ã¬ã¯ã·ã§ã³ãèªåçã«åæç»ãããŸãã
ããã€ãã®ãŠãŒã¶ãŒã±ãŒã¹ãèãåºãããšãã§ããŸãã1ã€ã®ãã¿ã³ã§ã³ã¬ã¯ã·ã§ã³ã®ãã¶ã€ã³ã倿Žãããããã³ãã¬ãŒãããµãŒããŒã«ãããŸãïŒä»¥äžã®äŸã§ã¯ã Fetch APIã䜿çšãããŸã ïŒã
fetch('templates/my-template.html') .then(resp => resp.text()) .then(text => this.itemRenderer = text);
ãµãŒããŒããã³ãã¬ãŒããæäŸãããŸã§åŸ
æ©ããããšãªããã¢ã€ãã ã®æ¿å
¥ãåé€ãäžŠã¹æ¿ããªã©ãéåžžã©ããã³ã¬ã¯ã·ã§ã³ãæäœã§ããŸãã ãµãŒããŒããæ»ããšãã³ã¬ã¯ã·ã§ã³èªäœãããŒãžã«æç»ãããŸãã
æ°ãããã€ã³ããŒ
ãã€ã³ããŒã¯ãããŒãžäžã®èŠçŽ ã«ããããã£ãé¢é£ä»ããæ¹æ³ã瀺ããªããžã§ã¯ãã§ããããšãæãåºãããŠãã ããã ãã€ã³ããŒã¯ã1æ¹åãŸãã¯2æ¹åã®ãã€ã³ãã£ã³ã°ãå®è£
ããbindNodeã¡ãœããã«ãã£ãŠäœ¿çšãããŸãã
this.bindNode('x', '.my-node', binder); this.x = 42;
詳现ãªèª¬æã¯ãã¡ãœããã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸã ã
MK.binders.progress-ããããã£ãããã°ã¬ã¹èŠçŽ ã®HTML5ç¶æ
ã«é¢é£ä»ããŸãã ãã€ã³ããŒã¯æšæºãã€ã³ããŒã®ã³ã¬ã¯ã·ã§ã³ã®äžéšã§ãããããæåã§åŒã³åºãå¿
èŠã¯ãããŸããã
this.bindNode('x', '.my-progress'); this.x = 42;
MK.binders.innerText-ããããã£ãtextContent
ãŸãã¯innerText
ããããã£ãæã€èŠçŽ ã®ããã¹ãå€ã«textContent
ãŸãã
this.bindNode('x', '.my-node', MK.binders.innerText()); this.x = 'Some <i>Text</i>';
MK.binders.style-ãªããžã§ã¯ãã®ããããã£ãèŠçŽ ã®style
ãªããžã§ã¯ãã®ããããã£ã«é¢é£ä»ããŸãã
this.bindNode('x', '.my-node', MK.binders.style('color')); this.x = 'red';
ãããŠæãè峿·±ãã®ã¯ã MK.binders.fileã§ãã ãã®æ°ãããã€ã³ããŒã¯ã input[type=âfileâ]
ã®å
容ã倿ŽãããŠãŒã¶ãŒããã£ããããã ãã§ãªããå¿
èŠãªåœ¢åŒã§ãã¡ã€ã«ãèªã¿åããŸãã
this.bindNode('x', '.my-file', MK.binders.file('dataURL'));
詳现ã«ã€ããŠã¯ã ãã€ã³ããŒã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
ããã§ãåè¿°ã®ãã€ã³ããŒã䜿çšããŠãMatryoshkaã«ãŒãã«ã¯çŸåšã®ããããã£ã«å¯Ÿå¿ããããããã£ããããã©ããããã§ãã¯ããçãããããã®å ŽåãèŠçŽ ããå€ãæœåºããŠããããã£ã«å²ãåœãŠãŸãã
<div class="my-div">Some data</div>
Matreshka.Array
ã¯ãæ°ããä»®æ³onItemRender
ã¡ãœããããããŸãã ã³ã¬ã¯ã·ã§ã³å
ã®èŠçŽ ã®1ã€ãæç»ããããšåŒã³åºãããŸãã ãã®ã¡ãœããã¯ãã³ãŒãããããã©ããã«ãã "render"
ã€ãã³ãããªãã¹ã³ããã®ãé²ã"render"
ã
"render"
ã€ãã³ãã¯åžžã«æšæºãã¿ãŒã³ã§ãããããã¬ã³ããªã³ã°æã«å¿
èŠãªãã€ã³ãã£ã³ã°ã远å ã§ããŸãã
class MyCollection extends MK.Array { Model: MyModel; itemRenderer = '<li>'; constructor() { super() .bindNode('sandbox', '.array-sandbox') .on('*@render', evt => { evt.self.bindNode(...); }); } }
ããã§æ¬¡ã®ããšãã§ããŸãã
class MyCollection extends MK.Array { Model: MyModel; itemRenderer = '<li>'; constructor() { super() .bindNode('sandbox', '.array-sandbox'); } onItemRender(item, evt) { item.bindNode(...); } }
ãã¢ãã«ãã«ã¯ãåæ§ã®ä»®æ³ã¡ãœããonRender
ãŸãã
以åã¯æ¬¡ã®ããã§ããã
class MyModel extends MK.Object { constructor() { super() .on('render', evt => { this.bindNode(...); }); } }
ããã§ã次ã®ããã«æžãããšãã§ããŸãã
class MyModel extends MK.Object { constructor() { super() } onRender() { this.bindNode(...); } }
ããŒã¿ãã€ã³ãã£ã³ã°ããã³DOMããŒãã宣èšããåŸãéçºè
ã¯ãã€ã³ãã¡ãœãããš$ãã€ã³ãã¡ãœããã䜿çšããŠæ¥ç¶ãããããŒãã«ã¢ã¯ã»ã¹ã§ããŸãã bound
ã¯ãæåã®ãã€ã³ããããèŠçŽ $bound
-jQueryãŸãã¯Balalaikaã³ã¬ã¯ã·ã§ã³ã®åœ¢åŒã®ãã¹ãŠã®èŠçŽ ãè¿ããŸãã
this.bindNode('x', '.my-node'); var boundNode = this.bound('x'); var allBoundNodes = this.$bound('x');
nodes
ãš$nodes
ã®ããããã£ã䜿çšãããšãåãããšãè¡ãããšãã§ããŸããããããã®ããããã£ã¯éåžžã®ãªããžã§ã¯ãã§ãããããããã©ãŒãã³ã¹ã®ç¹ã§ã¯ã»ãšãã©ç¡æã§ãã
this.bindNode('x', '.my-node'); var boundNode = this.nodes.x; var allBoundNodes = this.$nodes.x;
ããã€ãã®æ°ããã¡ãœãã
Matreshka.to㯠ãä»»æã®ãªããžã§ã¯ããMK.Object
ããã³MK.Array
ã€ã³ã¹ã¿ã³ã¹ã«å€æããŸãã
MK.Array.of㯠ã Array.ofãšåãããã«æ©èœããŸããã MK.Array
ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
MK.Array.from㯠ã Array.fromãšåãããã«æ©èœããŸããã MK.Array
ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
String.prototype.trimããµããŒãããªããã©ãŠã¶ãŒã®MK.trim ã
MK.toArrayã¯ãé
åã®ãããªé
åããã€ãã£ãé
åã«å€æããé床ãArray.prototype.sliceã® 2åã§ãã
æ§èœåäž
for..in
ïŒããšãã°ã each
颿°ã®ä»£ããã«for..in
ã«ãŒãã䜿çšïŒãšãã倧ããªå€æŽã®å©ããåããŠãåªããçµæãéæããããšã倿ããŸããã ããšãã°ãå°ããªã³ã¬ã¯ã·ã§ã³ïŒ10èŠçŽ ïŒã®ãã³ãããŒã¯ã§ã¯ãChromeãšFirefoxã§ãããªã§ãŒã·ã«ãReactã«10ã20ïŒ
é
ããŸããïŒãã ãã倿°ã®èŠçŽ ãå«ããã³ãããŒã¯ã®ã³ã¬ã¯ã·ã§ã³ã远ãè¶ããŸããïŒã åããã¹ãã§ããããªã§ãŒã·ã«ã¯Chromeã®Reactãã50ïŒ
é«éã§ãFirefoxã®3åé«éã§ãã
以äžã«ã 10åã®èŠçŽ ã 50åã®èŠçŽ ã 100åã®èŠçŽ ã 500åã®èŠçŽ ã 1000åã®èŠçŽ ã®ãã³ãããŒã¯ã瀺ããŸãã
ãã°ã®åŠçïŒãã¹ã
ãããªã§ãŒã·ã«ã¯æçµçã«èªåçã«ãã¹ããããŸãã ãã®ããã¥ã¡ã³ãã®å·çæç¹ã§ã¯ãã¡ãœãããéçºãã©ã³ãã«å
¥ãåã«ãã¹ããã148ã®ãã¹ããå®è£
ãããŠããŸãã ç¹ã«çްå¿ã®æ³šæãæã£ãŠãã¹ããããŠããã®ã¯ãããŸããŸãªç¶æ³äžã§æ©èœããåæã«äœããå£ããªãããã«å¿
èŠãªå§ä»»ãããã€ãã³ãã§ãã
ãã©ãŠã¶ã®ãµããŒã
ããã¥ã¡ã³ããµã€ãã«ã¯ããã®ããŒãžã§ã³ã®ããã«å®è£
ã§ããªãã¡ãœããã倧éã«ãããããInternet Explorer 8ã§ã®ãããªã§ãŒã·ã«ã®äœ¿çšã¯æšå¥šãããªããšããèŠåã衚瀺ãããŸããã å®éãããã¯éçºè
ããã®ãããªæ¹æ³ãèããã«äœ¿çšããããšããå Žåã®å
責äºé
ã«ãããŸããã èŠããŠãããªããã°ãªããªãã®ã¯ããã€ãã£ããªããžã§ã¯ãã«ãéæ³ãã远å ããéçã¡ãœãããIE8ã§æ©èœããªãããšã§ãã
this
ãMatryoshkaã®ã€ã³ã¹ã¿ã³ã¹ã§ããã°ããã®ãããªã³ãŒãã¯IE8ã§åäœããŸãã
this.bindNode('key', '.node');
ãããŠãããã¯åäœããŸãïŒ
var mk = new Matreshka(); mk.bindNode('key', '.node');
ãããŠããã®ã³ãŒãã¯IE9 +ããã³ä»ã®ãã©ãŠã¶ãŒïŒå€ä»£ã®WebKitããã³Opera Miniãå«ãïŒã§ã®ã¿æ©èœããŸãã
var object = {}; MK.bindNode(object, 'key', '.node');
8çªç®ã®ããã§éçã¡ãœããã䜿çšããããã«æãéåžžã«ãããå Žåã¯ãæåã«ãªããžã§ã¯ããMatryoshkaã®ã€ã³ã¹ã¿ã³ã¹ã«å€æã§ããŸãã
var object = MK.to({}); MK.bindNode(object, 'key', '.node');
ãããã£ãŠã ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ãå°éãããŸãã
ãã®ä»ã®å€æŽ
-bindNodeæ§æãå°ãæ¡åŒµãããŸããã
bindNode
ã¡ãœããã䜿çšããããŒãã®æ¬ èœã«é¢ãããšã©ãŒbindNode
ããæ
å ±ébindNode
å€ããªããŸãããããŒä»¥å€ã®ããã¹ãã§ã¯ãã»ã¬ã¯ã¿ãŒã瀺ãããŸãïŒã»ã¬ã¯ã¿ãŒãæž¡ãããå ŽåïŒã
-ãœãŒã¹ã³ãŒãã¯å°ããªã³ã³ããŒãã³ãã«åå²ãããŸãã
-äžèŠãªã¹ããŒã¹ïŒ f(x)
代ããã«f( x )
ïŒãã³ãŒãããã³ãµã€ãã®äŸããåé€ãããŸããã
-åè¿°ã®ããã«ããããªã§ãŒã·ã«ã¯Opera Miniãšå€ãWebKitããµããŒãããŠããŸãã
ä»ã®å€æŽãä¿®æ£ããããšã©ãŒã®ãªã¹ãã«ã€ããŠã¯ããµã€ãã®å¯Ÿå¿ããã»ã¯ã·ã§ã³ã§ç¢ºèªã§ããŸãã
ãã®ä»
Trelloã§è¡ãããããšãšè¡ãããäºå®ã確èªã§ããŸãã æç¥šããããšãã§ããã«ãŒãã®åªå
床ãäžãããŸãã
Gitterãã£ããã§ã¯ãæ°æ©èœã«é¢ããè°è«ãé »ç¹ã«è¡ãããŸãã ãã®ããããŠãŒã¶ãŒãå°ãã質åãšãã®åçã¯ãã€ã³ã¿ãŒãããã®æãå°äžå®€ã®ã©ããã§å€±ãããŸãã ãããã£ãŠãå®éšãšããŠã Muut ïŒ ãã·ã¢èªãšè±èª ïŒã«åºã¥ããã©ãŒã©ã ãéå§ããããšã決å®ãããŸããã 質åãçºçããå Žåã¯ãïŒè³ªåãæãã ãšæã£ãŠããŠãïŒæ°è»œã«è³ªåããŠãã ããã
ããšãã°ã Rendolã®ãã°ããã質åã®1ã€ãšãããã«å¯Ÿãã詳现ãªåçããããŸãã
ãæšæ¶ïŒ
åã³ä»¥åãšåã質åãããŸãããããã®çãã¯ãŸã çŸãããšã¯æããŸããã§ããã
ããšãã°ãVKã®ãããªå¯Ÿå¿ïŒ
User = { id: 5, name: 'Fedor', online: true }
ãã®ãŠãŒã¶ãŒãå¥ã®éšå±ã«é
眮ããŸãïŒroom1ãroom2ãroom3ã
User.online = falseã®å Žåã3ã€ã®éšå±ãã¹ãŠã§ãããšãã°è²ã倿Žããå¿
èŠããããŸãã
T.O. 1ã€ã®ãªããžã§ã¯ããå«ã3ã€ã®ã³ã¬ã¯ã·ã§ã³ã§ãåæã«ãã®ãªããžã§ã¯ãã¯3ãæã«è¡šç€ºãããŸãã
泚ïŒãããã®ã³ã¬ã¯ã·ã§ã³ãåãã¿ã€ãïŒéšå±ã ãã§ãªãïŒã§ããå¿
èŠã¯ãªããç°ãªãã¿ã€ãã衚çŸã§ãã£ãŠãããŸããŸããã
åäžã®ãªããžã§ã¯ããè€æ°ã®ãã¥ãŒã«ãã€ã³ãããããšã¯å¯èœã§ããïŒ
çãã¯ïŒ
ã¯ãããªããžã§ã¯ããå«ãã³ã¬ã¯ã·ã§ã³ã¯ç°ãªãå ŽåããããŸãã bindRenderedAsSandbox: false
, , (, , ). . render
, , , .
: jsbin.com/cidise/12/edit . user
( ul), -. tableUsers[0].name = 'xxx'
, , . , .
è
åšã IE 8, , , .instanceOf
object.instanceOf( MyClass );
, . ãæž
èŽããããšãããããŸããã