取消订阅后再次激活 observable
Activate observable again after unsubscribe
我有一个切换按钮和一个日历,看起来像
正如您在图片上看到的,edit
是一个切换按钮,当它被按下时,日历将是可编辑的。
编辑切换按钮定义为热可观察:
let oEditOb = this._createEditObservable(this.getById("cal-edit"));
_createEditObservable: function (oEditBtn) {
return Rx.Observable.create(function (subscriber) {
oEditBtn.attachPress(function (oEvent) {
subscriber.next(oEvent);
});
});
},
还有日历上的 select 事件:
let oCalendarSelectOb = this._createCalendarSelectObservable(this.getById("calendar-view"));
_createCalendarSelectObservable: function (oCalendar) {
return Rx.Observable.create(function (subscriber) {
oCalendar.attachSelect(function (oEvent) {
subscriber.next(oEvent);
})
});
},
当按下切换按钮时,它将切换到日历可观察。为了澄清考虑以下代码片段:
_processCalenderSelect: function (oCalendarSelectOb, oEditButtonOb) {
let self = this;
return oEditButtonOb
.filter(function (oBtn) {
return oBtn.getPressed();
})
.switchMapTo(oCalendarSelectOb)
.mergeMap(function (oCalendar) {
return Rx.Observable.from(oCalendar.getSource().getSelectedDates());
})
.map(function (oDateRange) {
return oDateRange.getStartDate();
});
},
一旦切换到日历可观察,日历将永远可编辑,即使我按下切换按钮以禁用 edit
模式。
我试图取消订阅日历 select 观察:
oEditPressedOb.subscribe(function (oSource) {
if(!oSource.getPressed()){
oSubscription.unsubscribe();
}
console.log(oSource);
});
但再次启用edit
模式后,日历select将不再流式传输。
尝试使用combineLatest:
_processCalenderSelect: function (oCalendarSelectOb, oEditButtonOb) {
let self = this;
let selectedDates = oCalendarSelectOb
.mergeMap(function (oCalendar) {
return Rx.Observable.from(oCalendar.getSource().getSelectedDates());
})
.map(function (oDateRange) {
return oDateRange.getStartDate();
});
return Rx.Observable
.combineLatest(
oEditButtonOb.map(function (oBtn) {
return oBtn.getPressed();
}),
selectedDates
)
.filter(function (input) {
return input[0];
})
.map(function (input) {
return input[1];
});
},
我有一个切换按钮和一个日历,看起来像
正如您在图片上看到的,edit
是一个切换按钮,当它被按下时,日历将是可编辑的。
编辑切换按钮定义为热可观察:
let oEditOb = this._createEditObservable(this.getById("cal-edit"));
_createEditObservable: function (oEditBtn) {
return Rx.Observable.create(function (subscriber) {
oEditBtn.attachPress(function (oEvent) {
subscriber.next(oEvent);
});
});
},
还有日历上的 select 事件:
let oCalendarSelectOb = this._createCalendarSelectObservable(this.getById("calendar-view"));
_createCalendarSelectObservable: function (oCalendar) {
return Rx.Observable.create(function (subscriber) {
oCalendar.attachSelect(function (oEvent) {
subscriber.next(oEvent);
})
});
},
当按下切换按钮时,它将切换到日历可观察。为了澄清考虑以下代码片段:
_processCalenderSelect: function (oCalendarSelectOb, oEditButtonOb) {
let self = this;
return oEditButtonOb
.filter(function (oBtn) {
return oBtn.getPressed();
})
.switchMapTo(oCalendarSelectOb)
.mergeMap(function (oCalendar) {
return Rx.Observable.from(oCalendar.getSource().getSelectedDates());
})
.map(function (oDateRange) {
return oDateRange.getStartDate();
});
},
一旦切换到日历可观察,日历将永远可编辑,即使我按下切换按钮以禁用 edit
模式。
我试图取消订阅日历 select 观察:
oEditPressedOb.subscribe(function (oSource) {
if(!oSource.getPressed()){
oSubscription.unsubscribe();
}
console.log(oSource);
});
但再次启用edit
模式后,日历select将不再流式传输。
尝试使用combineLatest:
_processCalenderSelect: function (oCalendarSelectOb, oEditButtonOb) {
let self = this;
let selectedDates = oCalendarSelectOb
.mergeMap(function (oCalendar) {
return Rx.Observable.from(oCalendar.getSource().getSelectedDates());
})
.map(function (oDateRange) {
return oDateRange.getStartDate();
});
return Rx.Observable
.combineLatest(
oEditButtonOb.map(function (oBtn) {
return oBtn.getPressed();
}),
selectedDates
)
.filter(function (input) {
return input[0];
})
.map(function (input) {
return input[1];
});
},