from Dojo XHR Plugins; How do you want your XHR today? on Ajaxian
Neil Roberts씨가 Dojo를 사용한 XHR 플러그인과 어떻게 시스템을 확장할 수 있는지에 대해 글을 썼습니다.
여러분이 dojo.xhrGet을 봤다면, "받아들일수 있는 값이: 텍스트(기본값), json, json-comment-optional, json-comment-filtered, javascript, xml"과 같다는 것을 알게될 것입니다, 하지만:
다음으로, Neil은 노드를 자동 업데이트하는 시스템을 작성했습니다:
참, 쉽죠:
Dojo 도 꽤 유연한 것 같습니다. 원하는 데이터 형태를 다루기 위해 간단히 새로운 handleAs 타입을 추가하기만 하면 되네요.
Neil Roberts씨가 Dojo를 사용한 XHR 플러그인과 어떻게 시스템을 확장할 수 있는지에 대해 글을 썼습니다.
여러분이 dojo.xhrGet을 봤다면, "받아들일수 있는 값이: 텍스트(기본값), json, json-comment-optional, json-comment-filtered, javascript, xml"과 같다는 것을 알게될 것입니다, 하지만:
여러분이 모를만한 것은 handleAs 파라미터가 단지 어떤 플러그인을 사용할지 정하는 방법에 불과하다는 것입니다. 이 플러그인들이 어디있는지, 어떻게 동작하는지, 어떻게 여러분의 프로젝트에 적용될 수 있는지를 알면 반복작업을 쉽게 보다 적은 에러로 수행할 수 있습니다.
그는 json 스타일 콜백에 피기백 방식을 사용했고, 쿼리 할 때에 대한 훅을 추가했습니다. 업데이트된 객체가 있다면 JSON 방식으로 되돌아올테고, 그러면 추가로 원격 호출을 하지 않아도 그들을 다룰 수가 있습니다:
[code:js]
dojo._contentHandlers.json = (function(old){
return function(xhr){
var json = old(xhr);
if(json.updated){
processUpdatedObjects(json.updated);
delete json.updated;
}
return json;
}
})(dojo._contentHandlers.json);
dojo._contentHandlers.json = (function(old){
return function(xhr){
var json = old(xhr);
if(json.updated){
processUpdatedObjects(json.updated);
delete json.updated;
}
return json;
}
})(dojo._contentHandlers.json);
다음으로, Neil은 노드를 자동 업데이트하는 시스템을 작성했습니다:
[code:js]
dojo.xhrGet({
url: "node-updates.php",
handleAs: "node-update-server"
});
dojo.xhrGet({
url: "node-content.php?node=sidebar",
node: "sidebar",
handleAs: "node-update"
});
dojo.xhrGet({
url: "node-updates.php",
handleAs: "node-update-server"
});
dojo.xhrGet({
url: "node-content.php?node=sidebar",
node: "sidebar",
handleAs: "node-update"
});
참, 쉽죠:
[code:js]
dojo.mixin(dojo._contentHandlers, {
"node-update-server": function(xhr){
var json = dojo._contentHandlers.json(xhr);
dojo.forEach(json.updates, function(update){
var node = dojo.byId(update.id);
if(node){
node.innerHTML = update.html;
}
});
},
"node-update": function(xhr){
var node = dojo.byId(xhr.args.node);
if(node){
node.innerHTML = dojo._contentHandlers.text(xhr);
}
}
});
dojo.mixin(dojo._contentHandlers, {
"node-update-server": function(xhr){
var json = dojo._contentHandlers.json(xhr);
dojo.forEach(json.updates, function(update){
var node = dojo.byId(update.id);
if(node){
node.innerHTML = update.html;
}
});
},
"node-update": function(xhr){
var node = dojo.byId(xhr.args.node);
if(node){
node.innerHTML = dojo._contentHandlers.text(xhr);
}
}
});
Dojo 도 꽤 유연한 것 같습니다. 원하는 데이터 형태를 다루기 위해 간단히 새로운 handleAs 타입을 추가하기만 하면 되네요.
'[IT] Web Tech' 카테고리의 다른 글
W3C XMLHttpRequest 최종 초안 (0) | 2008.04.17 |
---|---|
DOH, 내 코드를 테스트해줘! (0) | 2008.04.17 |
Busy.js: Canvas로 읽는 로딩 이미지 (0) | 2008.04.17 |
JavaScript : The Good Parts (0) | 2008.04.17 |
Dojo XHR 플러그인; 오늘은 XHR을 어떻게 할까요? (0) | 2008.04.17 |
Ajax 모자이크 이미지 생성기 (0) | 2008.04.16 |
jQuery와 Prototype 벤치마크 (0) | 2008.04.16 |
WebKit 의 CSS 그래디언트 (0) | 2008.04.16 |
blur, focus 이벤트의 이벤트 위임 (0) | 2008.04.16 |
댓글을 달아 주세요