Ich habe folgende beobachtbar:überspringen weitere Verfahren Verkettungs
_processSelectedPlantWcOb: function (oSelect) {
let self = this;
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;
})
.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();
});
},
Angenommen, ich habe eine Instanzvariable x = false
, die in Zukunft x = true
ändern werden. Auf der zweiten Karte möchte ich fragen, ob x is true
. Wenn ja, sollte es abonnieren und der Stream wird dort aufhören.
Um zu verdeutlichen, was ich meine. Betrachten Sie die zweite Karte. Das, was es wird wie folgt aussehen:
.map(function (oControl) {
if(x === true) {
// Subscribe it. stop the stream
}
let oItem = oControl.getSelectedItem();
let aKeys = oItem.getKey().split("/");
return {plant: aKeys[0], wc: aKeys[1]};
})
Können Sie bitte ein Beispiel erstellen. Ich habe vergessen zu erwähnen, das ist ein heißes beobachtbares. '_createCalendarSelectObservable: function (oCalendar) { return Rx.Observable.create (function (Beobachter) { oCalendar.attachSelect (function (oEvent) { observer.onNext (oEvent); }) }); }, 'das wird jedes Mal ausgelöst, wenn der Benutzer das Datum drückt. –
Mit takeUntil würde es nicht funktionieren, da die x-Variable auf true gesetzt wird, wenn auf eine Schaltfläche geklickt wird. –