1
let oSelectOb = oSelect
.map(function (oEvent) {
return oEvent.getSource();
})
.map(function (oControl) {
let oItem = oControl.getSelectedItem();
let aKeys = oItem.getKey().split("/");
return {plant: aKeys[0], wc: aKeys[1]};
})
.flatMap(function (oSelectedItem) {
let oModel = self.getModel("weightProtocolService");
let oPlantFilter = new Filter("Plant", sap.ui.model.FilterOperator.EQ, oSelectedItem.plant);
let oWcFilter = new Filter("WorkCenter", sap.ui.model.FilterOperator.EQ, oSelectedItem.wc);
return Rx.Observable.create(function (observer) {
oModel.read("/CostCenterCalendarSet", {
success: function (oData, oResponse) {
observer.next(oResponse);
},
error: function (oError) {
observer.error(oError);
},
filters: [oPlantFilter, oWcFilter]
});
});
})
.map(function (oData) {
return oData.data.results;
});
다음 단계로, 나는 oData.data.results
배열이 0보다 큰 경우 유효성을 검사 할, 그래, 다음은 전달 계속해야하는 경우 정렬. 배열이 0이면 다른 관찰 가능해야합니다.
한 레일에서 다른 레일로 점프하는 것, 뭔가 잘못 될 때 (if/else 시나리오).
당신이, 내가 할 수있는 정리가 최초의지도 기능에 볼 수있는 업데이트
oSelect
.map(function (oEvent) {
// Clean up dates
let oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/specialDates", []);
return oEvent.getSource();
})
.map(function (oControl) {
let oItem = oControl.getSelectedItem();
let aKeys = oItem.getKey().split("/");
return {plant: aKeys[0], wc: aKeys[1]};
})
.flatMap(function (oSelectedItem) {
let oModel = self.getModel("weightProtocolService");
let oPlantFilter = new Filter("Plant", sap.ui.model.FilterOperator.EQ, oSelectedItem.plant);
let oWcFilter = new Filter("WorkCenter", sap.ui.model.FilterOperator.EQ, oSelectedItem.wc);
return Rx.Observable.create(function (observer) {
oModel.read("/CostCenterCalendarSet", {
success: function (oData, oResponse) {
observer.next(oResponse);
},
error: function (oError) {
observer.error(oError);
},
filters: [oPlantFilter, oWcFilter]
});
});
})
.map(function (oData) {
return oData.data.results;
})
.filter(function (aData) {
return aData.length > 0;
})
.flatMap(function (aData) {
return Rx.Observable.from(aData)
})
.filter(function (oData) {
let oToday = new Date();
return oData.InspectionDate.getTime() > oToday.getTime();
});
:
// Clean up dates
let oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/specialDates", []);
하지만 생각이없는 문제를 해결하기 위해 깨끗한 방법을 . 그것은 기능 프로그래밍 이데올로기를 깨뜨린다.
업데이트 2
나는 다음과 같이 시도 :
return oSelect
.map(function (oEvent) {
// Clean up dates
/*let oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/specialDates", []);*/
return oEvent.getSource();
})
.map(function (oControl) {
let oItem = oControl.getSelectedItem();
let aKeys = oItem.getKey().split("/");
return {plant: aKeys[0], wc: aKeys[1]};
})
.flatMap(function (oSelectedItem) {
let oModel = self.getModel("weightProtocolService");
let oPlantFilter = new Filter("Plant", sap.ui.model.FilterOperator.EQ, oSelectedItem.plant);
let oWcFilter = new Filter("WorkCenter", sap.ui.model.FilterOperator.EQ, oSelectedItem.wc);
return Rx.Observable.create(function (observer) {
oModel.read("/CostCenterCalendarSet", {
success: function (oData, oResponse) {
observer.next(oResponse);
},
error: function (oError) {
observer.error(oError);
},
filters: [oPlantFilter, oWcFilter]
});
});
})
.map(function (oData) {
return oData.data.results;
})
.flatMap(function (aData) {
if (aData.length === 0) {
return Rx.Observable.empty();
}
return Rx.Observable.from(aData)
})
.filter(function (oData) {
let oToday = new Date();
return oData.InspectionDate.getTime() > oToday.getTime();
});
과 가입 방법은 전혀 호출되지 않습니다.
아니, 내가 무슨 뜻인지, 내가 명확하게 설명하지 않습니다 수 있습니다. 배열이 제로의 경우는, 메소드 체인을 중단 해 다른 방법으로 진행해야한다. 여기에 설명 된대로 http://fsharpforfunandprofit.com/posts/recipe-part2/. –
그래서 "다른 방향으로 가라"는 것은 관측 가능한 체인의 끝을 의미합니까? 당신은 이것을 위해'Observable.empty()'를 사용합니다. – martin
배열이 비어 있으면 예를 들어 다른 변수를 정리하려고합니다. –