We are struggling with how to transition away from observers in our Ember app.
For this case we have a 3rd party WebRTC library that starts when we call startStream. We cannot start the stream before status is 'live' and isConnected is true After refactoring away observers this is what we came up with:
_status: null,
status: computed({
set(key, value) {
const status = value.value
this.set('_status', status)
const isConnected = this.get('isConnected')
this.handleStream(isConnected, status)
return status
},
get() {
return this.get('_status')
}
}),
_isConnected: false,
isConnected: computed({
set(key, value) {
this.set('_isConnected', value)
const status = this.get('status')
this.handleStream(value, status)
return value
},
get() {
return this.get('_isConnected')
}
}),
handleStream(isConnected, status) {
if (!isConnected) return
if (status === 'live') {
this.startStream()
}
}
The old way:
handleStream: observer('liveStream.status', 'isConnected', function() {
if (!this.get('isConnected')) return
if (this.get('status') === 'live') {
this.startStream()
}
})
The old way with an observer just looks so much shorter and easier to follow. Are we missing some better way of doing this?
Thanks!