2012-02-12 7 views
7

No se puede determinar cuál es el problema. Cuando hago clic en un título de modelo, recupera todos los modelos en la colección a la vez en lugar de buscar un modelo. Si muevo este evento de logView a logsView, funciona correctamente pero no tiene acceso al modelo, bueno, puedo encontrar este modelo usando el índice o la identificación de otro modelo, pero no creo que sea una buena manera.El evento de clic de red troncal desencadena eventos para toda la colección en lugar del modelo

var Log = Backbone.Model.extend({}); 


window.LogsList = Backbone.Collection.extend({ 
    model:Log, 

    url:function (tag) { 
     this.url = '/logs/' + tag; 
     return this; 
    } 
}); 

window.colList = new LogsList(); 

window.logView = Backbone.View.extend({ 
    el:$('.accordion'), 

    template:_.template($('#log').html()), 

    initialize:function() { 
     this.model.bind('add', this.render, this); 
    }, 

    events:{ 
     "click .accordion-toggle" :"getLogBody" 
    }, 

    render:function() { 
     return this.template(this.model.toJSON()); 
    }, 

    getLogBody:function() { 
     this.model.fetch(); 
    } 
}); 

window.LogsView = Backbone.View.extend({ 
    el:$("#content"), 

    initialize:function (options) { 
     colList.bind('reset', this.addAll, this); 
     colList.url(options.data).fetch(); 
    }, 

    addOne:function (model) { 
     var view = new logView({model:model}); 
     $("#accordion").append(view.render()); 
    }, 

    addAll:function() { 
     colList.each(this.addOne); 
    } 
}); 

window.listView = new LogsView({data:"Visa_Cl"}); 

Respuesta

10

El problema es causado por su el en el LogView: Para ver los eventos el:$('.accordion')

de cadenas principales están alcance de la vista de el. En este caso, ha especificado la vista el como TODOS elementos HTML con una clase de "acordeón". Por lo tanto, cuando hace clic en cualquier de sus elementos HTML con esta clase, el código se ejecuta para todos ellos, por lo que está viendo este comportamiento.

Este artículo le mostrará algunas opciones para hacer lo que quieres, correctamente:

También recomendaría la lectura de éste, para entender mejor el uso de el en Backbone , y algunos de los trucos y las trampas de la misma:

+0

Gracias, sospeché que me metí con eso. – nateless

+0

Gracias hombre! excelente recurso! –

+0

Gracias ... justo lo que necesitaba. –

Cuestiones relacionadas