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"과 같다는 것을 알게될 것입니다, 하지만:

여러분이 모를만한 것은 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);

다음으로, 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"
});

참, 쉽죠:
[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 도 꽤 유연한 것 같습니다. 원하는 데이터 형태를 다루기 위해 간단히 새로운 handleAs 타입을 추가하기만 하면 되네요.
Posted by 행복한고니 트랙백 0 : 댓글 0