2011-02-05 3 views
22

У меня есть простой список дел, и все они отображаются как ожидалось, но когда я нажимаю кнопку отправки в форме редактирования, форма отправляется (GET/todo_items), и страница перезагружается, только показывает форму редактирования , Событие «отправить форму» не связано, и я не могу понять, почему. Что мне не хватает?Backbone.js: Почему это событие не связано?

App.Views.Edit = Backbone.View.extend({ 
    events: { 
    "submit form": "save" 
    }, 
    initialize: function(){ 
    this.render(); 
    }, 
    save: function(){ 
    var self = this; 
    var msg = this.model.isNew() ? 'Successfully created!' : 'Saved!'; 

    this.model.save({ 
     title: this.$('[name=title]').val(), 

     success: function(model, resp){ 
     console.log('good'); 
     new App.Views.Notice({message: msg}); 
     self.model = model; 
     self.render(); 
     self.delegateEvents(); 
     Backbone.history.saveLocation('todo_items/'+ model.id); 
     $('#edit_area').html(''); 
     }, 
     error: function(){ 
     console.log('bad'); 
     new App.Views.Error(); 
     } 
    }); 

    return false; 
    }, 
    render: function(){ 
    $('#edit_area').html(ich.edit_form(this.model.toJSON())); 
    } 
}); 

Вот форма редактирования:

<script id="edit_form" type="text/html"> 
    <form> 
    <label for="title">Title:</label> 
    <input name="title" type="text" value="{{title}}" /> 
    <button>Save</button> 
    </form> 
</script> 

ответ

25

Магистраль использует делегат-элементы на элементе el. Если вы не укажете «el» или не используете «el» для рендеринга вашего представления, делегирование событий не будет работать. Вместо того чтобы делать

$("#edit_area") 

внутри рендеринга, передать его в качестве опции «эль» в конструкторе:

edit = new App.Views.Edit({el: $("#edit_area")}) 

относится к нему как this.el везде в вашем представлении кода, особенно в рендеринге ,

+0

Спасибо за этот ответ, поэтому '$ ('# edit_area'). Html («бла»), «не сработает». Как установить html элемента без отображения всего представления? –

0

После многих часов monkeying с этим, он работал после того, как я явно установить el на представлении, и используется $(this.el) в функции render. Weird.

+0

Не могли бы вы пояснить/опубликовать свой ответ? Благодаря! – Matt

+0

См. Мой ответ на ваш другой пост - http://stackoverflow.com/questions/5624929/backbone-view-el-confusion/5757160#5757160 – LeRoy

Смежные вопросы