2016-12-21 82 views
0

再次激活觀察到的我有一個開關按鈕和日曆,看起來像 enter image description here後退訂

正如你可以在圖像上看到,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模式。

我試圖退訂日曆中選擇觀察到:

oEditPressedOb.subscribe(function (oSource) { 
     if(!oSource.getPressed()){ 
      oSubscription.unsubscribe(); 
     } 
     console.log(oSource); 
     }); 

但隨後的日曆中選擇將不會再流再次啓用edit模式之後。

+0

所以,基本上,你需要停下來的時候'oEditOb'點擊第二次從冒落'_processCalenderSelect'日期? –

+0

我該怎麼做才能停止發射? –

回答

2

嘗試使用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]; 
    }); 
}, 
+0

它的功能就像一個魅力,謝謝謝爾蓋。 –