In your example
'{app.singer} shout' is binding shout event on concrete app.singer (can.Map) instance while control's (component events) init.
Do you want '{app.singer} shout' to be rebound every time app.singer is changed (replaced with new one)?
by the way if you would use not custom triggered (dispathed) event but attribute event (if shout was an attribute) you could achieve that with: '{app} singer.shout'