2011-12-09 12 views
8

Soy nuevo en Backbone.js. Creé una Vista para un botón que ya existe en la página. Aplico jquery-ui para el botón cuando se inicializa la vista:¿Cómo aplico jquery-ui a una vista de Backbone.js?

var ButtonView = Backbone.View.extend({ 
    el: $('#ButtonId'), 
    initialize: function() { 
     $(this.el.selector).button(); 
    } 
}); 

Este método funciona, pero me pregunto si hay un selector simple que podría utilizar en lugar de $(this.el.selector)? Al principio pensé que podría simplemente hacer el.button(); pero eso no funciona.

¿O existe una manera mejor/más simple de abordar todo el proceso?

Respuesta

10

puedo asegurarle el.button(); funciona pero ...

que necesita para tener en cuenta cuando se ejecuta el selector de vista de jQuery.

cuando lo escribe como lo hizo, su selector jQuery se ejecuta cuando se analiza el código de vista, lo que significa que esto ocurre principalmente cuando su dom no estaba listo para cargarse.

se puede pasar mejor el el en adelante como esto:

var ButtonView = Backbone.View.extend({ 
    initialize: function() { 
     this.el.button(); 
    } 
}); 

$(function(){ 
    var myButton = new ButtonView({ el: $('#ButtonId') }); 
}); 

ahora, la vista se crea una instancia de documento listo, el elemento de botón se pasa porque el Reino estaba listo y el selector resuelve al elemento de botón . y puedes usar felizmente el.button(); para aplicar algo en él.

ejemplo: http://jsfiddle.net/saelfaer/KEQQB/

edición

otra manera de hacerlo es definir su elementselector como argumento el, y sólo ejecutarlo como lo hizo.

var ButtonView = Backbone.View.extend({ 
    el: '#ButtonId' 
    initialize: function() { 
     $(this.el).button(); 
    } 
}); 

$(function(){ 
    var myButton = new ButtonView({ }); 
}); 

esto funciona tan bien, pero sólo sería capaz de utilizar este punto de vista en el botón dado menos que lo sustituya, el primer ejemplo es más limpio para la reutilización de código, se puede crear una instancia de 3 veces y cada uno de ellos podrían pasar a otro botón para ...

ejemplo: http://jsfiddle.net/saelfaer/KEQQB/6/

sidenote en una anotación al margen te sugiero usar el método render, que son libres de hacer esto en el inicio, pero creo el método de renderizado es el que debería ser handli ng esto.

var ButtonView = Backbone.View.extend({ 

    initialize: function() { 
     _.bindAll(this, "render"); 
    }, 

    render: function() { 
     this.el.button(); 
     return this; 
    } 
}); 

$(function(){ 
    var myButton = new ButtonView({ el: $('#ButtonId') }).render(); 
}); 
+0

Puede añadir 'http: // ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css' a los recursos si quieres un poco de estilo. 'el: '# myButton'' y' $ (this.el) .button() 'sería otra opción, ¿no? –

+0

1) correcto, $ (this.el) .... también es una opción, luego debe especificar el el en su vista, sin embargo, depende de dónde lo necesite, para volver a usar la vista en varios lugares, no me importa pasar el elemento, ya que proporciona flexibilidad 2) gracias por el enlace jquery ui css, lo agregaré de inmediato – Sander

+0

Gracias, tienes razón. Mi problema no era el selector que estaba usando, sino que el selector se estaba ejecutando antes de que DOM estuviera listo. Cada parte de tu respuesta fue útil. – xcer

Cuestiones relacionadas