Comments (6)
안녕하세요. 질문 별로 나누어서 답변드립니다.
리듀서에서 공통 응답 헤더에 따라 실패 처리를 해주고 싶은데 방법을 모르겠네요.
예를 들면 아래와 같은 응답의 경우 요청에 자체를 성공을 한 것이지만 앱에서는 실패로 처리를 하여야 하는데요.
{
"header": {
"isSuccessful": false,
"message": "Error"
},
"data": null
}
리듀서의 onSuccess()를 정의하여 처리하려 하여도 리듀서의 소스를 보면 단순히 success 함수의 배열을 차례대로 호출만 해주고 있을 뿐 반환 값의 여부를 보아 실패 처리한다든가 하는 것이 불가능해 보여 방법이 있는 것인지 궁금합니다.
작성하는 동안 this.addError()를 쓰면 되겠다는 생각이 드네요..
요청의 응답이 성공이라면 리듀서에서는 onSuccess
로 처리가 됩니다. onSuccess
에서 응답 헤더를 판단하여 this.finish(error)
라던지 필요한 처리를 하시면 됩니다.
from woowahanjs.
또 리듀서의 소스를 보면 fail()과 finish()에서 this.removeAction()를 호출해주고 있습니다.
만약 onSuccess()에서 finish()를 호출하지 않는다면 직접 removeAction() 처리를 해주어야 하는 것인지요?
마찬가지로 onFail()에서 removeAction()를 직접 처리해주어야 하는지요?
removeAction를 필수로 호출해야 하진 않습니다만. 위의 방법처럼 this.finish(error)
정도로 처리하시면 좋을 것 같습니다.
from woowahanjs.
그리고 앱 전역 이벤트로 error 이벤트가 발생했을 경우 레이어 팝업으로 표시를 해주려고 하는데요.
팝업 뷰를 정의했다고 했을 때 이 뷰를 동적으로 추가해주려면 어떻게 해야 하는지요?
뷰 내부에서는 this.addView()를 통해 가능한 것으로 보이는데요.
앱의 이벤트 핸들러에서는 어떤 방법이 예제나 설명을 뒤져보아도 보이지 않아서 질문 드립니다.
물론 뷰의 기능을 무시하고 직접 jQuery를 이용하여 조작하여도 되겠지만 방법이 있을지요?
설명에는 토스트 등을 보여주는데 사용할 수 있다고 되어 있는데 구체적인 방법을 알려주실 수 있을지요?
전역 이벤트 error
를 사용하는 방법은 권장하지 않고 있습니다. View 내부에서 error를 처리( 팝업 뷰라던지 )하는 것이 좋을 것 같습니다.
from woowahanjs.
추가.
모든 리듀서에서 공통으로 헤더를 판단해야 한다면 리듀서 내에서 use
메소드를 사용하여 미들웨어를 주입하여 처리할 수도 있습니다. 최근에 추가된 기능이어서 아직 문서가 업데이트 안되었는데요. 문서가 업데이트되면 전해드리겠습니다.
예) this.use(Woowahan.Reducer.SUCCESS, successHandler);
감사합니다.
from woowahanjs.
마지막 답변은 문서 업데이트를 기다리겠습니다. :)
현재는 listview 예제를 참고하여 coreReducer를 정의하여 구현하였는데 좀더 좋은 방법이 있는 것 같습니다.
답변 고맙습니다.
from woowahanjs.
@flyskyne 리듀서 미들웨어 주입하는 다음의 예제를 참고하세요. :)
https://gist.github.com/ibare/d6bceb1bb9df2b412afaf4302e053537
참고로 리듀서에서 dispatch의 핸들러로 결과를 보내는 this.finish 메소드는 인자 구성 방식에 제약이 없는데요. 이를 이용해 첫 인자는 error 객체, 두 번째 인자는 응답 메세지 객체로 작성하는 방법을 컨벤션으로 사용하고 있습니다. (node 쪽 API 의 컨벤션과 유사합니다. ^^)
그러면 핸들러 쪽에선 성공과 오류에 대하여 일관된 코드 작성이 가능합니다.
this.dispatch(Woowahan.Action.create(USERS), function(err, resp) {
if (err) {
// 오류 처리
}
// 응답 처리
});
from woowahanjs.
Related Issues (20)
- @submit 이벤트 핸들러의 form 객체에 checkbox, textarea 값이 전달되지 않음 HOT 1
- VirtualDOM 지원 HOT 1
- @submit 이벤트의 복수 폼 submit 지원
- reducer cancel 기능 추가
- 템플릿 엔진 추가
- 미들웨어 아키텍처 구현 HOT 1
- 라우팅 변경 시 탐지 방법 HOT 1
- Woowahan.View 변수에 대한 naming convention HOT 1
- 링크 깨짐 문의 HOT 1
- woowahanjs 1 대 버전과 woowahan-action-player 같이 사용하는 경우 성능문제 HOT 2
- woowahanjs 1 대 버전에서 리스트 데이터를 랜더링 할 경우 깜빡 거리는 현상 HOT 1
- 우아한 js 는 타입스크립트와 같은 js 슈퍼셋을 지원할 계획이 있나요?
- 플러그인 아키텍처 지원 HOT 1
- Schema form-validator에 nullable 옵션을 추가 부탁드립니다 HOT 2
- 뷰에서 언제든 접근/제어 가능한 공통 뷰 컴포넌트 등록 방식 제공 HOT 1
- 스키마 기본 필터 기능
- 멀티 액션 지원 리듀서 개발 HOT 1
- 리듀서에 전처리 프로세스 주입 구조 개발 HOT 1
- 리듀서 구독 기능 개발
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from woowahanjs.