2012-05-09 12 views
5

Così ho recentemente trovato l'attributo disabled nel Em.TextField, tuttavia non riesco a riattivare il TextField dopo ho esteso con i disabili proprietà impostata su true.Emberjs - disattivare e attivare TextField

var app = Em.Application.create(); 
app.randomObj = Em.Object.create({ 
    temp: null 
}); 
app.textField = Em.TextField.extend({ 
    valueBinding: 'app.randomObj.temp', 
    disabled: true 
}); 

Come rimuovere la proprietà disabilitata con Ember?

+0

Non sono sicuro di ciò che era indietro quando hai postato questa domanda, ma è sicuramente possibile definire la proprietà disabilitata all'interno della vista senza alcun binding di controller. – asaf000

risposta

7

Ci sono alcuni problemi con il codice di esempio, sarò indirizzo dei ciascuno e spero di poter chiarire alcune cose in su.

Naming Convention

Prima di tutto si dovrebbe avere uno sguardo alla Emberist post su naming conventions: Le classi dovrebbero essere denominati maiuscole e le istanze lowerCase - fatta eccezione per le applicazioni e gli spazi dei nomi. Quindi nel tuo fornita JSFiddle nella comment è App.controller e App.ATextField.

Dichiarare App come variabile globale

Si sta creando un'istanza di un Ember.Application e assegnandolo a var app. Anche se si deve fare attenzione quando si usano le variabili globali, in questo caso si dovrebbe definire l'applicazione sul namespace globale, quindi dovrebbe essere App = Ember.Application.create(); rispettivamente window.App = Ember.Application.create();. Dichiarando l'app come variabile globale, è possibile utilizzare la potente funzione Associazioni nei modelli e nel codice JS.

Associazioni

Gli attacchi devono essere dichiarati su istanze e non sulle classi. Con questo voglio dire che non definirebbe il valueBinding del vostro App.TextField nella definizione della classe, ma piuttosto spostare questo all'istanza concreto, ad esempio nel modello.

Nel tuo JSFiddle fornito nel tuo comment il tuo binding al controller non funziona perché non ne usi uno: per creare un binding a un controller/oggetto specifico/... devi dichiarare il nome della proprietà si desidera associare e aggiungere una stringa Binding. Quindi sarebbe disabledBinding: 'App.controller.shouldDisable'.


Esempio

ho refactoring del codice, vedere http://jsfiddle.net/pangratz666/pLpKV/:

Manubrio:

{{view Ember.TextField 
    valueBinding="App.tempObj.hold" 
    disabledBinding="App.controller.shouldDisable"}} {{App.tempObj.hold}} 

JavaScript:

App = Em.Application.create(); 

App.controller = Em.Object.create({ 
    shouldDisable: true 
}); 

App.tempObj = Em.Object.create({ 
    hold: "initial value" 
}); 

// just to illustrate how to define bindings outside of templates, 
// we're adding a TextField with bindings setup the same as for the 
// template 
Ember.TextField.create({ 
    valueBinding: 'App.tempObj.hold', 
    disabledBinding: 'App.controller.shouldDisable' 
}).appendTo('body'); 
+0

Wow, questo è più di quanto avrei potuto sperare. Grazie per aver dedicato del tempo a spiegare i miei problemi, lo apprezzo davvero. – mlienau

2

associarlo a un controller, e si può attivare o disattivare a piacimento. Disabilitato è un attributo legato, quindi quando la proprietà cambia, il modello si aggiornerà.

+0

Quando lo leggo a un controller ottengo qualcosa di simile in HTML ' 'Modifica: aggiunto un [violino] (http://jsfiddle.net/RPWnX/) – mlienau

+1

I percorsi di bind vengono inseriti in una proprietà separata che termina in" Binding "," DisabledBinding "in questo caso. –

+0

Funziona ora grazie! – mlienau

Problemi correlati