0

トリガーが適切に反応するのに苦労しています。機能しているものはたくさんありますが、そのうちの 1 つが機能しておらず、その理由がわかりません。

これが私のAppControllerクラスです

class ProjectOrder.View.AppController extends Backbone.View
  initialize: ->
    @promptOfficeSearch()

  promptOfficeSearch: ->
    officeSearch = new ProjectOrder.View.OfficeSearch
    officeSearch.on 'createOffice', @promptOfficeCreate
    officeSearch.on 'createTicket', @promptTicketCreate
    officeSearch.on 'accountAndTicketExist', @killProcessAccountExists


 promptOfficeCreate: (serial) ->
   @officeModel = new ProjectOrder.Model.OfficeModel()
   @officeModel.set('serial_number', serial)

   officeCreate = new ProjectOrder.View.OfficeCreator({model: @officeModel})
   officeCreate.on 'createTicketOffAccount', @promptTicketCreate

 promptTicketCreate: (model) ->
   console.log 'promptTicketCreate'
   model = model || @officeModel
   ticketModel = new ProjectOrder.Model.TicketModel()
   new ProjectOrder.View.TicketCreator({ticketModel: ticketModel, officeModel: model})

 killProcessAccountExists: (ticket_id) ->
   msg = document.createElement 'div'
   msg.className = 'account-exists-msg'
   msg.innerHTML = "Account already exists. Redirecting to ticket #{ticket_id}..."

   $('#create-order-div').append(msg)
   setTimeout((->
     window.location = "/pto/#{ticket_id}"
   ), 2000)

promptOfficeSearch 関数の officeSearch オブジェクトからのすべてのトリガーが正しく機能します。それらはすべて、それぞれ次のようにトリガーされます。

@trigger 'createOffice', serial
@trigger 'createTicket', data.model[0]
@trigger 'accountAndTicketExist', data.model

しかし、promptOfficeCreate の officeCreate オブジェクトでは、OfficeCreator クラスの submitOffice ajax 成功コールバックに登録されている createTicketOffAccount イベントに応答しません。

class ProjectOrder.View.OfficeCreator extends Backbone.View
  template: _.template($("#OfficeCreator").html())
  id: 'office-creator'
  events:
    'click .submit'     : 'submitOffice'

  initialize: ->
    @render()

  render: ->
    @$el.html(@template(@model.toJSON()))
    $('#create-order-div').append(@$el)

  submitOffice: ->
    @setModelData()
    @model.save(null,{
      success: (model) =>
        @trigger 'createTicketOffAccount', model
        #@$el.remove()
      error: ->
        alert 'error'
    })

  setModelData: ->
    @model.set({
      office_name:    $('#office').val()
      doctor_name:    $('#doctor').val()
      emr:            $('#has-emr').is(':checked')
      forms_builder:  $('#has-forms').is(':checked')
      iehr:           $('#has-iehr').is(':checked')
      clipboard:      $('#has-clip').is(':checked')
      specialty_id:  $('#specialty').val()
    })

トリガーが機能しない理由はありますか?

4

1 に答える 1

1

クラスのすべてのメソッドに太い矢印が必要だと思いますAppController

このイベントが発生すると:

officeSearch.on 'createOffice', @promptOfficeCreate

このpromptOfficeCreate関数は、コントローラー インスタンスにバインドされたメソッドではなく、通常の関数として呼び出されるthisため、これが発生すると、次のようになります。

officeCreate.on 'createTicketOffAccount', @promptTicketCreate

@promptTicketCreate未定義であり、イベント バインディングが適切に接続されていません。

于 2013-08-01T21:25:05.380 に答える