Как найти идентификатор модели, соответствующий выбранному предмету? - PullRequest
5 голосов
/ 05 марта 2012

Как узнать идентификатор элемента, на который я нажал? мой код указан ниже:

$(function() {
  ipl.mvc.view.openings_view = ipl.mvc.view.view_base.extend({
    template: '/assets/t/plmt/companies.tmpl.html',
    ID: '#tmpl_openings',
    events: {
      "click #edit": "editpost"
    },
    initialize: function() {
      var _this = this;
      _.bindAll(this, 'addOne', 'addAll', 'render', 'editpost');
      _this.loadTemplate(_this.template, function() {
        _this.model = new ipl.mvc.model.companies_model([]);
        _this.model.view = _this;
        _this.model.bind('change', _this.render, _this);

      });
    }

    ,
    render: function() {
      var _this = this
      jsonData = _this.model.toJSON();
      _.each(jsonData, function(model) {
        $(_this.ID).tmpl(model).appendTo(_this.el);
        return _this;
      });
    }
    ,
    editpost: function(e) {
      console.log("EDIT CLICKED");
      e.preventDefault();
      var ele = $(e.target);
      console.log(ele);
      _this.model = new ipl.mvc.collection.companies_collection([]);
      var id = _this.model.get("id");
      alert(id);
    }
  });
});

и шаблон

<a href="!/editpost/${id}" data-id="${id}"><button id="edit"  ><img   src="/assets/img/pencil.png" /></button></a>

Мне нужен идентификатор для использования в функции редактирования, но я не получаю ${id} из шаблона, и я выполняю эти шаги, но я не получил его? как получить ${id} кликаемого элемента из шаблона?

Ответы [ 2 ]

13 голосов
/ 05 марта 2012

на самом деле, что вам нужно, это:

  1. вы установили идентификатор данных для элемента html в шаблоне

  2. вы добавили метод, который будет выполняться для правильного события (editPost)

  3. в этом методе editPost вы можете сделать это:

    editPost: function(e){
      e.preventDefault();
      var id = $(e.currentTarget).data("id");
      var item = this.collection.get(id);
    }
    

примечание я заметил, что в вашем коде слишком много закрывающих тегов, поэтому он не будет работать здесь, и я также заметил, что в вашем editPost вы пытаетесь _this, но вы никогда не объявляете _this. у вас должно было быть var _this = this; в этом методе.

примечание 2 я не понимаю, почему вам даже нужен идентификатор данных в этом примере, Существует два способа визуализации представления: либо представление имеет привязанную к нему коллекцию, либо модель. При привязке коллекции к представлению вам может потребоваться получить правильный идентификатор из элемента, по которому щелкнули, чтобы найти нужную модель в вашей коллекции

но в вашем примере к вашему представлению привязана модель, поэтому у вас есть только тот 1 идентификатор, который вы можете просто получить, позвонив по номеру this.model.get('id');. Я полагаю, что весь приведенный выше пример кода скопирован из другого примера, где они используют коллекцию в представлении, поскольку как ваш рендеринг, так и использование свойства data-id предполагают это.

0 голосов
/ 01 июля 2014

Это еще один (более новые версии магистрали?) Способ сделать это: (я вижу, @Sander показывает метод model.get в своих замечаниях)

var AppointmentView = Backbone.View.extend({
  events: {
    'click' : 'alertTitle'
  },

  alertTitle : function(e) {
    // this.model.get('id') is what you're looking for
    alert( this.model.get('title') );
  }
});
...