2012-03-05 6 views
5

Come sapere l'ID dell'articolo su cui ho fatto clic? il mio codice è il seguente:Come trovare l'ID del modello corrispondente all'elemento cliccato?

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

e modello

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

ho bisogno id da utilizzare in funzione di modifica, ma non ricevendo ${id} da modello, e seguo quei passi e non ho capito ? come ottenere il ${id} di elemento selezionato dal modello?

+0

si prega di dare un'occhiata al codice che avete inviato, credo non è corretto se mi chiedi che ha troppe parentesi di chiusura. prova a riformattare il tuo codice in modo che sia più invitante per gli altri per cercare di trovare una soluzione per favore – Sander

risposta

13

in realtà ciò che vi serve è questo:

  1. aver impostato i dati-id sull'elemento HTML nel modello

  2. è stato aggiunto un metodo da eseguire sul evento (editPost)

  3. in quel metodo editPost si può fare questo:

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

osservazione ho notato il vostro codice ha troppi tag di chiusura, in modo da non correre qui, e ho anche notato nel vostro editPost si tenta _this ma non hai mai dichiarare _this. dovresti aver avuto var _this = this; in quel metodo.

osservazione 2 io non capisco perché avete nemmeno bisogno di un data-id in questo esempio, ci sono due modi di rendere la vista, sia la vista ha una collezione legata ad esso, o si ha un modello . Quando si associa una raccolta a una vista, è possibile in qualche modo ottenere l'ID corretto dall'elemento su cui si fa clic per trovare il modello corretto nella propria collezione

ma sul proprio esempio, la vista ha un modello associato ad essa, quindi è solo hai quel 1 ID, che puoi semplicemente chiamare chiamando this.model.get('id'); credo che il tuo intero esempio di codice dall'alto, sia copiato da un altro esempio in cui usano una collezione nella vista, dal momento che sia il tuo rendering, sia l'uso della proprietà data-id suggerisce questo.

-1

Questo è un altro (le nuove versioni di spina dorsale?) Modo di fare questo: (vedo @Sander mostra il metodo model.get nelle sue osservazioni)

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')); 
    } 
}); 
Problemi correlati