Событие нажатия кнопки Backbone не срабатывает

0

У вас возникли проблемы с получением события нажатия кнопки, зарегистрированного в режиме позвоночника. Сам вид отображается очень хорошо, с правильными данными, замещенными в шаблоне, но когда я нажимаю сгенерированную кнопку, ничего не происходит. Есть идеи?

Мое мнение определяется как:

var IndividualNoteView = Backbone.View.extend({

    template:$("#indivNoteTemplate").html(),

    events: {
        'click .removeItem': "buttonClickHandler",
    },

    initialize : function (options) {
        console.log("Creating new indiv note view");

        this.options = options || {};
        this.gridster = this.options.gridster;
        this.noteModel = this.options.noteModel;
        this.row = this.options.row;
        this.col = this.options.col;
        this.el = $("#"+this.noteModel.get("noteId"));
        console.log("my domain- "+this.el.selector);
        this.noteModel.on('remove', this.destroy_view);
    },

    render: function(){
        var tmpl = _.template(this.template);
        this.el = tmpl(this.noteModel.toJSON());
        this.gridster.add_widget(tmpl(this.noteModel.toJSON()));
    },

    buttonClickHandler : function(event){
        alert( $(event.currentTarget).text());

        return false;
    }
});

и мой шаблон (в моем index.html) определяется как:

<script id="indivNoteTemplate" type="text/javascript">
<li id="<%= noteId%>">
   <div>Text: <%= text%></div> 
   <button class="removeItem">Remove</button></li>
</script>
  • 0
    Это похоже на проблему последовательности. Возможно, вы захотите установить селектор для вашего el, когда вы передадите любые параметры инициализации: new IndividualNoteView ({el: '#' + modelInstance.get ('noteId')});
  • 0
    @kdkavanagh, любой из этих ответов помог решить вашу проблему?
Теги:
backbone.js

2 ответа

0

В момент, когда initialize называется, ваш шаблон не был отображен так this.el = $("#"+this.noteModel.get("noteId")); вероятно, ничего не выбирает.

Кроме того, Backbone.View создает элемент для вас, поэтому вам не нужно это делать.

В соответствии с документами Backbone ваша функция рендеринга должна, вероятно, больше похожа на эту

render: function(){
    var tmpl = _.template(this.template);
    this.$el.html(tmpl(this.noteModel.toJSON()));
    this.gridster.add_widget(this.$el);
}

Если вы когда-либо захотите установить свойство .el вручную, вы должны вызвать setElement для правильной настройки вида Backbone. Вы можете видеть, как это используется здесь внутри.

0

Вам необходимо установить el свойство backbone привязывает события к представлениям el.

например:

el: '#container'

Или вы могли:

id: function()
{
    return this.noteModel.get('noteId');
}

а затем использовать this.$el вместо этого this.el = $("#"+this.noteModel.get("noteId")); в функции инициализации.

Вам тогда не нужно было бы делать id="<%= noteId%>" в шаблоне, так как позвоночник будет обрабатывать его для вас.

  • 0
    хм, он устанавливает el в initialize . Но даже если el не задано, по умолчанию создается новый <div> .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню