Vue: .once๋Š” .self์™€ ์ž˜ ์–ด์šธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 02์›” 02์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

<div @click.self.once="eat">Eat <span>me</span></div>

"๋จน๊ธฐ"๋‹จ์–ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ํ•œ ๋ฒˆ ์‹œ์ž‘๋˜๊ณ  ์šฐ๋ฆฌ๋Š” ํ–‰๋ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž์‹ ๋…ธ๋“œ ์ธ "me"๋ฅผ ํด๋ฆญ ํ•œ ๋‹ค์Œ "Eat"๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! .once ์€ (๋Š”) ์ด๋ฒคํŠธ๋ฅผ ์‹œ์ž‘๋œ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์‰ฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

.once ๋Š” ์‹ค์ œ๋กœ ํ•ด๊ณ  ๋œ ๊ฒฝ์šฐ์—๋งŒ ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  6 ๋Œ“๊ธ€

๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ณด๊ณ  ์ง€์นจ์„ ๋”ฐ๋ฅด๊ณ  ์„ค๋ช… ๋œ ๋™์ž‘์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜์žˆ๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„ ์„ธํŠธ๊ฐ€ ํฌํ•จ ๋œ ์ตœ์†Œํ•œ์˜ JSFiddle ๋˜๋Š” JSBin์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”,

๋‚˜๋Š” OP๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ทธ๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…์„ ์œ„ํ•ด ์•„๋ž˜์— JSFiddle์„ ์ฒจ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

JSFiddle

  1. 'Eat'๋ผ๋Š” ๋‹จ์–ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ๊ณผ์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

  2. JSFiddle์„ ๋‹ค์‹œ๋กœ๋“œํ•˜๊ณ  span ์ž์‹ ์š”์†Œ 'me'๋ฅผ ํด๋ฆญ ํ•œ ๋‹ค์Œ 'Eat'๋ฅผ ํด๋ฆญํ•˜๋ฉด ๊ณผ์ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@boristhuy JSFiddle์„ ์ œ๊ณตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค.

๋ฒ„๊ทธ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋ฒคํŠธ ํ•ธ๋“ค์€ ์ผ๋‹จ ๋“ค์–ด๊ฐ€๋ฉด ์ œ๊ฑฐ๋˜๋ฉฐ ์‹ค์ œ๋กœ ์ˆ˜์ • ์ž ๊ฒ€์‚ฌ๋กœ ์ธํ•ด ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด once ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒ˜๋Ÿผ

(function(){
  var called = false;
  return function($events){
    // modifiers check
    // called check
    if (called)return;
    called = true;
    // handler code
  }
})()

๋ Œ๋” ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ๋˜๋Š” once ๊ฒฝ์šฐ์—๋Š” ํฐ ๋ณ€ํ™”๊ฐ€์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

  1. [wip] ํ…œํ”Œ๋ฆฟ์˜ once genCode๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  2. ๋Œ€ํ•œ [์™„๋ฃŒ] once ์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋ Œ๋”๋ง on: {'~click': handle} , ๊ธฐ์กด์˜ ์ „๋žต์„ ์œ ์ง€ํ•œ๋‹ค.
  3. [์™„๋ฃŒ] ๋‹ค์Œ ์‚ฌ๋ก€์— ๋Œ€ํ•œ updateListeners์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ด์ „ : '~click': handle
    ์‹ ๊ทœ : 'click': handle2

@defcc ์‹คํ–‰์ด ๊ธˆ์ง€ ๋œ ํ•ธ๋“ค๋Ÿฌ์—์„œ ํŠน์ˆ˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ธ๊ธ‰ ํ•œ (3) ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ„๋„์˜ PR์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰