2013-02-12 9 views
6

Nel seguente numero Layout, aggiungo uno CollectionView per visualizzare un elenco SELECT entro onRender. Subito dopo, sto usando l'ui hash per abilitare o disabilitare tutti i controlli all'interno della vista. Questo non funziona per la SELECT generata da new App.View.Categories.Problemi di interfaccia utente con il layout della burotica backbone

Dovrebbe? O l'interfaccia utente non ha funzionato su Regions all'interno di un Layout?

App.View.UploadFile = Backbone.Marionette.Layout.extend({ 
    template: '#upload-file-template', 
    regions:{ 
     category: 'td:nth-child(4)' 
    }, 
    ui:{ 
     inputs: 'textarea, select, .save' 
    }, 
    onRender: function(){ 
     this.category.show(
      new App.View.Categories({ 
       collection: App.collection.categories 
      }) // generates the SELECT list 
     ); 

     console.log(this.ui.inputs); // Length 2. Missing select. 
     console.log(this.$('textarea, select, .save')); // Length 3 

     this.ui.inputs.prop(
      'disabled', (this.model.get('upload_status')!='staged') 
     ); 
    } 
}); 

risposta

11

Questo dovrebbe funzionare come ci si aspetta che funzioni. Il codice in questione nella fonte Marionette è qui: https://github.com/marionettejs/backbone.marionette/blob/master/src/marionette.itemview.js#L49-L51

La chiamata a bindUIElements() è ciò che converte il ui hash per oggetti selettore jQuery, e si chiama proprio prima che il metodo onRender viene chiamato.

Stai vedendo errori? O il selettore semplicemente non restituisce nulla e non ha alcun effetto sugli elementi?


Aggiornamento:

Ah! Certo ... non stavo prestando attenzione al tuo codice abbastanza vicino. Hai ragione nel fatto che i selettori di elementi dell'interfaccia utente si verificano prima di aggiungere la sottoview alla regione. Non mi sono mai imbattuto in questa situazione prima ... ma questo sembra qualcosa che vorremmo aggiustare/supportare.

Per ora, la soluzione migliore che posso suggerire sarebbe chiamare "this.bindUIElements();" alla fine del tuo metodo onRender. Ciò costringerebbe gli elementi dell'interfaccia utente a re-legarsi ai selettori.

Aggiungerò anche un problema alla lista dei problemi di github, per cercare una soluzione migliore per questo. non so quando sarò in grado di arrivare a questo, ma questo lo otterrà almeno nella lista delle cose da sistemare.

+0

Non ci sono errori. Ho aggiunto alcuni esempi di console.logs qui sopra. Il selettore sta tralasciando la selezione, ma restituisce gli altri due elementi. Come puoi vedere dal secondo console.log, lo stesso selettore incluso in $ works. – Bart

+0

Guardando la fonte, penso di vedere il problema. Questi elementi sono vincolati PRIMA che l'elemento SELECT sia aggiunto all'interno di onRender. Forse aggiungere regioni come questa, all'interno di onRender, non è la migliore pratica. Hai un altro modello da consigliare? – Bart

+0

Grazie per l'aggiornamento! – Bart

Problemi correlati