{"action":"opened","issue":{"url":"https://api.github.com/repos/untiedJS/untiedJS/issues/11","labels_url":"https://api.github.com/repos/untiedJS/untiedJS/issues/11/labels{/name}","comments_url":"https://api.github.com/repos/untiedJS/untiedJS/issues/11/comments","events_url":"https://api.github.com/repos/untiedJS/untiedJS/issues/11/events","html_url":"https://github.com/untiedJS/untiedJS/issues/11","id":120155696,"number":11,"title":"이벤트 lock의 개념","user":{"login":"hikaMaeng","id":5790535,"avatar_url":"https://avatars.githubusercontent.com/u/5790535?v=3","gravatar_id":"","url":"https://api.github.com/users/hikaMaeng","html_url":"https://github.com/hikaMaeng","followers_url":"https://api.github.com/users/hikaMaeng/followers","following_url":"https://api.github.com/users/hikaMaeng/following{/other_user}","gists_url":"https://api.github.com/users/hikaMaeng/gists{/gist_id}","starred_url":"https://api.github.com/users/hikaMaeng/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hikaMaeng/subscriptions","organizations_url":"https://api.github.com/users/hikaMaeng/orgs","repos_url":"https://api.github.com/users/hikaMaeng/repos","events_url":"https://api.github.com/users/hikaMaeng/events{/privacy}","received_events_url":"https://api.github.com/users/hikaMaeng/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-12-03T12:04:06Z","updated_at":"2015-12-03T12:04:06Z","closed_at":null,"body":"이건 제가 실무적으로 많이 쓰는 건데 어딜 클릭해서 데이터가 로딩중이거나 하면 다른 모든 버튼이 안눌러져야하는 경우가 있습니다.\r\n모달창이 나와서 막는 것과는 다른 종류죠. 이를 위해 전역락을 설정할 수 있게 하는게 어떨까 하는 것입니다.\r\n```html\r\n<div data-click=\"a\" data-lock=\"test\"></div>\r\n```\r\n이렇게 test라는 lock이 걸려있는 경우\r\n\r\n평소에는 잘작동하지만 lock을 활성화하면 작동안하는 것입니다.\r\n\r\n```js\r\nut.lock('test');\r\nut.unlock('test');\r\n```\r\n\r\n이를 엄청 구체적인 코드로 살펴보면\r\n\r\n```js\r\nut(\"a\", function(e){\r\n    ajax.load(function(v){\r\n        v = JSON.parse(v);\r\n        //....data처리\r\n        ut.unlock('test'); //이 시점이 되어야 lock을 풀어줌\r\n    }, url);\r\n});\r\n```\r\n\r\na리스너는 클릭하면 데이터를 로딩할텐데, 그 작업이 다 끝나야 unlock해주므로 그 사이에는 test락이 걸려있는 모든 엘리먼트의 이벤트는 작동하지 않게 될 것입니다. 실제 doc입장의 전역리스너 코드에는\r\n\r\n```js\r\nvar lock;\r\nut.lock = function(v){lock = v;};\r\nut.unlock = function(){lock = '';};\r\ndoc.onclick = function(e){\r\n    if( !lock || //lock설정이 안되어있거나\r\n        !(v = target.getAttribute('data-lock')) || //lock속성이 타겟에 없거나\r\n        v != lock //그락이 그락이 아니라면..\r\n     ){\r\n         //...실제 할일 수행\r\n     }\r\n}while(target = target.parentNode)\r\n```\r\n\r\n이런식의 로직이 포함될 것입니다.\r\n좀더 확장해서 이벤트종류별 락을 사용할 수도 있습니다. 그래봐야..\r\n\r\n```js\r\nvar lock = {};\r\nut.lock = function(type, v){lock[type] = v;};\r\nut.unlock = function(){lock[type] = '';};\r\ndoc.onclick = function(e){\r\n    if( !lock[e.type] || !(v = target.getAttribute('data-lock')) || v != lock[type] ) \r\n```\r\n정도일뿐입니다.\r\n\r\nlock에 대한 여러가지 의견을 받습니다.\r\n\r\n"}}