2016-12-22 1 views
2

Ich verwende Betreff in meinem Code und frage mich, ob es empfohlen wird, es auf diese Weise zu tun.Empfohlen zu verwenden Betreff oder nicht

Als Erstes benutze ich den Betreff, wenn die Umschalttaste gedrückt wurde, werden andere Tasten als inaktiv gesetzt.

enter image description here

Nach edit wurde gedrückt: enter image description here

Betreff Definition und Implementierung Teilnehmercode:

let oButtonSubject = new Rx.Subject(); 
    this._subscribeButtonState(oButtonSubject); 

_subscribeButtonState: function (oButtonSubject) { 
     let self = this; 
     return oButtonSubject 
     .subscribe(function (oBtnState) { 
      let oModel = self.getModel("vmButtonsState"); 
      oModel.setProperty("/edit", oBtnState.bEdit); 
      oModel.setProperty("/mass", oBtnState.bMass); 
      oModel.setProperty("/save", oBtnState.bSave); 
      oModel.setProperty("/cancel", oBtnState.bCancel); 
     }); 
    }, 

Der obige Code wird den Zustand der Tasten.

Immer wenn die edit gedrückt wurde, wurde die next Methode aufgerufen und Daten auf oButtonSubject geschoben.

_subscribeEditPressOb: function (oEditPressed, oButtonSubject) { 
     let self = this; 
     return oEditPressed 
     .map(function (oSource) { 
      return oSource; 
     }) 
     .subscribe(function (oSource) { 

      // Determine select state for the calendar. 
      // The calendar is only allowed to select, if 
      // EDIT button is clicked. 
      if (oSource.getId().indexOf("cal-edit") >= 0 && oSource.getPressed()) { 
       oButtonSubject.next({bEdit: true, bMass: false, bSave: false, bCancel: false}); 
      } else { 
       oButtonSubject.next({bEdit: true, bMass: true, bSave: true, bCancel: true}); 
      } 
      }, 
      function (err) { 
      jQuery.sap.log.fatal(err); 
      }); 
    }, 

Der Code abonniert oben auf die edit-Taste, wenn er gedrückt wurde, nachdem die Daten zum Thema schieben.

Es ist der richtige Ansatz, um das Thema zu verwenden?

Antwort

3

Ein Subject ist als ein Eingang von der nicht-reaktiven Welt in die Rx-Welt gemeint. In Ihrem Fall verwenden Sie eine Subject zu emittieren Ereignisse basierend auf klicken Sie Ereignisse auf der Bearbeitungsschaltfläche.

Ich würde vorschlagen, Sie kein Thema für diese spezifische Implementierung verwenden, aber Ihre Klicks direkt als Stream verwenden, indem fromEvent

Die Verwendung folgt ein Beispiel (die Ecken und Kanten ignorieren, es bleibt Zustand im DOM) (jsbin)

const editButton = document.getElementById('enable-edit-mode') 
const saveChangesButton = document.getElementById('save-changes'); 
const cancelChangesButton = document.getElementById('cancel-save-changes'); 

const enableEditModeStream = Rx.Observable.fromEvent(editButton, 'click') 
.do(() => { 
    editButton.setAttribute('disabled','disabled') 
    saveChangesButton.removeAttribute('disabled'); 
    cancelChangesButton.removeAttribute('disabled'); 
}); 

const saveChangesStream = Rx.Observable.fromEvent(saveChangesButton, 'click') 
    .do(() => { 
    console.log('saving changes') 
    }); 
const cancelChangesStream = Rx.Observable.fromEvent(cancelChangesButton, 'click'); 

const saveCancelEditModeStream = Rx.Observable.merge(
    saveChangesStream, 
    cancelChangesStream 
) 
.do(() => { 
    editButton.removeAttribute('disabled'); 
    saveChangesButton.setAttribute('disabled','disabled') 
    cancelChangesButton.setAttribute('disabled','disabled') 
}); 


Rx.Observable.merge(
    enableEditModeStream, 
    saveCancelEditModeStream 
) 
.subscribe(); 
+0

Aber der Nebeneffekt ist nicht nett nicht? –

+0

nette Antwort - liebe es – danday74

Verwandte Themen