0

EmberJS を使用しており、websocket (socket.io) を使用してバックエンドからデータを取得しようとしているので、このアプリケーション ルートを設定しました。

  App.ApplicationRoute = Ember.Route.extend(
  setupController: (controller, data) ->
    store  = @get 'store'
    socket = io.connect "http://localhost:4000/orders" ## Line 4
    socket.on "new_order", (order) ->
      store.load(App.Order, order)
    socket.on "new_billing", (bill) ->
      store.load(App.Bill, bill)
    socket.on "connected", ->
      console.log "Ready"
  model: ->
    return { title: "Ordenes" }
  actions:
    markAsDone: (type, type_id) ->
      # Send value to backend
      socket.emit "confirm_" + type,                    ## Line 16
        id: type_id
      # Find record by id
      if type == "order"
        record = App.Order.find(type_id)
        transition = "orders"
      else if type == "bill"
        record = App.Bill.find(type_id)
        transition = "bills"
      # Delete from store
      record.then( (r) ->
        r.deleteRecord()
      )
      # Display list of record type
      @transitionTo(transition)
)

4行目で接続が設定され、「/」を押すとオブジェクトがフェッチされますが、ルートに入った後は「/orders」オブジェクトがフェッチされなくなり、上記のコードの16行目では使用できませんソケット変数

Uncaught ReferenceError: socket is not defined

これを管理するより良い方法はありますか?

4

2 に答える 2

1

markAsDone メソッドを実行すると、ソケットはスコープ外になります。コントローラーでソケットへの参照を設定し、後で取得できます (失敗した coffeescript を許してください)。

  App.ApplicationRoute = Ember.Route.extend(
  setupController: (controller, data) ->
    store  = @get 'store'
    socket = io.connect "http://localhost:4000/orders" ## Line 4
    ///////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////// 
    controller.set 'socket', socket
    socket.on "new_order", (order) ->
      store.load(App.Order, order)
    socket.on "new_billing", (bill) ->
      store.load(App.Bill, bill)
    socket.on "connected", ->
      console.log "Ready"
  model: ->
    return { title: "Ordenes" }
  actions:
    markAsDone: (type, type_id) ->
      ///////////////////////////////////////////////////////////////////////////
      ///////////////////////////////////////////////////////////////////////////
      socket = @get 'controller.socket'
      # Send value to backend
      socket.emit "confirm_" + type,                    ## Line 16
        id: type_id
      # Find record by id
      if type == "order"
        record = App.Order.find(type_id)
        transition = "orders"
      else if type == "bill"
        record = App.Bill.find(type_id)
        transition = "bills"
      # Delete from store
      record.then( (r) ->
        r.deleteRecord()
      )
      # Display list of record type
      @transitionTo(transition)
)
于 2013-11-10T23:24:32.917 に答える