Using bootstrap-modal as Backbone.js view

后端 未结 1 830
离开以前
离开以前 2021-01-30 14:08

I am attempting to create a Backbone.js view based on a Twitter bootstrap-modal, which makes use of Backbone\'s automatic event delegation via the events attribute

1条回答
  •  走了就别回头了
    2021-01-30 14:18

    Allright, so the solution is was rather simple:

    App.Views.ProjectsNav ||= {}
    
    class App.Views.ProjectsNav.NewProjectView extends Backbone.View
      tagName: 'div'
    
      events: {
        'click .save':   'save',
        'click .cancel': 'hide',
        'hidden':        'hidden',
        'shown':         'shown'
      }
    
      initialize: (options) ->
        super(options)
        @collection = options.collection
    
      hide: () ->
        @el.modal(true).hide()
        false
    
      save: (e) ->
        ...
        @model.save(attrs, {
          success: (project) =>
            @model = project
            @collection.add(@model)
            @hide()
          error: (project) =>
            alert('Something went wrong: ' + project)
          }
        )
        false
    
      render: () ->
        @el = ich.nav_edit_project_template(@model.toJSON()).modal('keyboard': true, 'backdrop': true)
        @delegateEvents()
        @el.modal('show': true)
        @
    
      hidden: () ->
        @remove()
        false
    
      shown: () ->
        App.Helpers.Forms.setFocus($(@el), true)
        false
    

    Summing things up, the key is to split showing the modal into two steps giving the possibility to assign @el and invoke @delegateEvents() afterwards before making it visible. @el.modal(true) can be used to get access to the object controlling the modal, e.g., to programmatically hide it.

    0 讨论(0)
提交回复
热议问题