2012-03-05 12 views
5

¿Cómo saber el Id del artículo que hice clic? mi código es el siguiente:¿Cómo encontrar el Id del modelo correspondiente al elemento cliqueado?

$(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); 
    } 
    }); 
}); 

y la plantilla

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

Necesito ID a utilizar en función de edición, pero no conseguir ${id} de la plantilla, y sigo esos pasos y yo no lo entendía ? cómo obtener el ${id} del elemento seleccionado de la plantilla?

+0

eche un vistazo en el código que envió, creo es incorrecto si me preguntas que tiene demasiados corchetes de cierre. intente cambiar el formato de su código para que parezca más invitante para que otros intenten encontrar una solución, por favor – Sander

Respuesta

13

en realidad lo que se necesita es la siguiente:

  1. que haya configurado los datos-id en el elemento html en la plantilla

  2. ha añadido un método que se ejecuta en el evento de la derecha (editPost)

  3. en ese método editPost usted puede hacer esto:

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

observación i notado que su código tiene demasiadas etiquetas de cierre, por lo que no se ejecutará aquí, y también he notado en su editPost intenta _Es pero nunca se declara _Es. debería haber tenido var _this = this; en ese método.

observación 2 no entiendo por qué ni siquiera necesita un Id de datos en este ejemplo, hay dos maneras de hacer un punto de vista, ya sea la vista tiene una colección con destino a ella, o que tiene un modelo . Al vincular una colección a una vista, es posible que de alguna manera necesite obtener la identificación correcta del elemento al que se hace clic para encontrar el modelo correcto en su colección

pero en su ejemplo, su vista tiene un modelo vinculado a ella, por lo que solo tener esa 1 ID, que puede obtener llamando al this.model.get('id'); creo que todo el ejemplo de código anterior, se copia de otro ejemplo donde usan una colección en la vista, ya que tanto su representación como el uso de la propiedad de identificación de datos sugiere esto

-1

Este es otro (las versiones más recientes de la columna vertebral?) Forma de hacer esto: (Veo @Sander muestra el método model.get en su discurso)

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')); 
    } 
}); 
Cuestiones relacionadas