我有一个可以照常订阅的观察者:
return oMassChangeOb
.subscribe(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
}, function (oErr) {
jQuery.sap.log.fatal(oErr);
});
我的问题是,如果上述观察结果已经订阅,如何运行其他可观察对象?
我可以这样做:
return oMassChangeOb
.subscribe(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
oSaveCancelFooterStateOb
.subscribe(function (oBtnState) {
const oModel = self.getModel("vmButtonsState");
oModel.setProperty("/bSave", oBtnState.bSave);
oModel.setProperty("/bCancel", oBtnState.bCancel)
});
}, function (oErr) {
jQuery.sap.log.fatal(oErr);
});
但我不知道,如果这是正确的方法。
有notification object可以解决方案,但不知道如何使用它。
答案 0 :(得分:2)
根据你所写的内容,你基本上想要在第一个observable完成后运行第二个observable,在这种情况下,只需将它们链接到一个流中:
#background1 {
width: 100%;
height: 100%;
position: absolute;
opacity: 0.3;
left: 0;
background-size: cover;
background-image: url("https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Kiyomizu-dera%2C_Kyoto%2C_November_2016_-01.jpg/800px-Kiyomizu-dera%2C_Kyoto%2C_November_2016_-01.jpg");
}
如果订单无关紧要,您可以同时使用两个流并使用merge
:
return oMassChangeOb
.do(function (aMassDates) {
const oModel = self.getModel("vmCalSpecialDates");
oModel.setProperty("/aActualDates", aMassDates);
})
.switchMapTo(oSaveCancelFooterStateOb)
.do((oBtnState) => {
const oModel = self.getModel("vmButtonsState");
oModel.setProperty("/bSave", oBtnState.bSave);
oModel.setProperty("/bCancel", oBtnState.bCancel)
}).subscribe(
undefined,
onErr => jQuery.sap.log.fatal(oErr)
);
作为一般性说明:尝试将尽可能多的逻辑移动到流本身(例如,通过使用Rx.Observable.merge(oMassChangeOb, oSaveCancelFooterStateOb)
.subscribe(
undefined,
onErr => jQuery.sap.log.fatal(oErr)
);
,如上所述)并使订阅尽可能干净和通用,这将使它成为可能更容易组合(合并,链,等)多个流,例如:
.do