anchor.diff:      .listen((e) {
         _updateString(e.details['owner'], e.details['isTyping']);
       });
  -    
  -    lifeCycle$.where((e) => e is DidUpdateEvent).listen((e) {
  -      scrollToBottom();  
  -    });
  -    
  -//    _closeBtn.mouse$.listen((e) {});
    }
     
     User owner;
  
positive.code:       
        publishStream(_closeBtn.mouse$.map((e) => new CloseEvent(this)));
        
        globalEvent$.where((e) => e is Message).listen((m) {
          messages.add(m);
  //        scrollToBottom();
          repaint();
        });
      });
     
      enter$.listen((e) {
  
negative.code: //    lifeCycle$.where((e) => e is WillUnmountEvent);
      
      globalEvent$.where((e) => e is CloseEvent && e.toBeClosed == chatbox).listen((e) {
        _shouldDisplayChatbox = false;
        repaint(); 
      });
      
      _button.mouse$.listen((e) {
        _shouldDisplayChatbox = true;
        repaint();
      });
    }
    User user;
    bool _shouldDisplayChatbox  = true;
    List<ChatboxComponent> chatboxes = [];
    ChatboxComponent chatbox;
    DomElement _button = button(className:'btn btn-default', children:'open chatbox', listenTo:['onClick']);
    
    @override
    ReactElement render() {
      return div(className: 'app', children: [
        nav(className:'navbar navbar-default', children: [
          div(className:'navbar-header', children: 
            a(className: 'navbar-brand', children: 'FakeBook')  
          ),
          div(className:'navbar-left navbar-text', children: [
            img(width:20, height:20, src:user.imageUrl),
            '$user',
            new Notification(user)            
          ]
          )
        ]),
        new FriendListComponent(user),
        _shouldDisplayChatbox ? chatbox : _button
      ]);
    }
  }
  