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');
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