Socket.IOとbackbone.jsを友達にする方法

誰もが知っているように、backbone.jsイベントは2つのカテゴリに分類されます。





最近、socket.ioイベントをバックボーンに接続する問題を解決する必要がありました。そのため、すべてがバックボーンアプリケーション内にあり、ソケットイベントをビューで直接宣言し、そこで発生するすべてのアクションを記述することができました。



バックボーンスタイルから逸脱しないように、DOMツリーイベントと同じ方法で、つまり次のようにsocket.ioイベントを追加する機能を実現したいと考えました。



var im = Backbone.View.extend({ io_events: { 'new_message': 'newMessage' }, newMessage: function(message_data){ //do something } });
      
      





インターネットの拡張を長時間検索した結果、バックボンとソケットを束ねるエレガントではない方法を選択することになり、問題を解決したようですが、私たちが望む方法ではありませんでした。 私は自分で考えなければなりませんでした。



一番下の行。


最終的に、私はあなたと共有したいコードが生まれました。 以下で、彼はそこで実際に何が起こっているのかを実際に説明しています:



 var socket = io.connect('127.0.0.1:9999'); var SocketDelegationSkeleton = Backbone.View.extend({ _initSocketio: function(){ if(this.io_events && _.size(this.io_events) > 0) for(var io_event in this.io_events){ var method = this.io_events[io_event]; //       if (!_.isFunction(method)) { method = this[method]; //   _.bind(method, this); //     this socket.on(io_event, method); //   socket.io }else{ throw new Error(' ' + '"' + method + '"' + '  '); } } } });
      
      





これで、socket.ioが使用する各ビューをSocketDelegationSkeletonからSocketDelegationSkeleton



、イベントを宣言し、 SocketDelegationSkeleton



initialize



する必要があります_initSocketio();







 var im = SocketDelegationSkeleton.extend({ io_events: { 'new_message': 'newMessage' }, initialize: function(){ this._initSocketio(); } newMessage: function(message_data){ //do something } });
      
      







利益!



All Articles