2012-05-09 34 views
5

Bu yüzden, yakın zamanda, engellenmiş özniteliğini Em.TextField uygulamasında buldum, ancak engelli özellik true değerine ayarlıyken genişlettikten sonra TextField'ı yeniden etkinleştiremiyorum.Emberjs - TextField'ı Devre Dışı Bırak ve Etkinleştir

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

Engelli özelliğini Ember ile nasıl kaldırabilirim?

+0

Bu soruyu ne zaman yayınladığınızdan emin değildim, ancak engelli özelliğini görünümde hiçbir denetleyici bağlaması olmadan tanımlamak kesinlikle mümkün. – asaf000

cevap

7

Örnek kodunuzla ilgili bazı sorunlar var, her birine gidip bazı şeyleri temizleyebileceğime umarım. Her şeyden önce sen Emberist bir göz olmalıdır

Sözleşmesi adlandırma

yaklaşık naming conventions sonrası: Sınıflar UpperCase ve örnekleri küçük harfe adlı olmalıdır - uygulamalar ve ad için istisna. Dolayısıyla, comment numaralı telefondan sağladığınız JSFiddle'da, App.controller ve App.ATextField. Bir Ember.Application bir örneğini oluşturup var app atamadan olan

küresel değişken olarak App bildirme

. Global değişkenleri kullanırken dikkatli olmalısınız, ancak bu durumda uygulamanızı genel ad alanında tanımlamanız gerekir, bu nedenle sırasıyla window.App = Ember.Application.create(); olmalıdır. Uygulamayı global değişken olarak bildirerek, şablonlarınızdaki ve JS kodunuzdaki güçlü Bindings özelliğini kullanabilirsiniz.

Bağlar

bağlamaları sınıflar üzerinde örneklerinde beyan değil edilmelidir. Bununla, App.TextField ürününüzün valueBinding'unu sınıf tanımınızda tanımlayamazsınız, bunun yerine bunu örneğin somut örneğe, örneğin şablona taşıyın.

Sağladığınız JSFiddle öğesinin comment'unuzda denetleyiciye bağlamanız, bir tane kullanmadığınız için çalışmaz: belirli bir denetleyiciye/nesneye bağ oluşturmak için ... özellik adını bildirmeniz gerekir Bağlamak ve Binding Dize eklemek istiyorsunuz. Yani disabledBinding: 'App.controller.shouldDisable' olur.


Örnek I kodunuzu refactored ettik

, http://jsfiddle.net/pangratz666/pLpKV/ bkz:

Gidon:

{{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

Vay, bu umduğumdan daha fazlası. Sorunlarımı gerçekten açıklamak için zaman ayırdığınız için teşekkürler, gerçekten takdir ediyorum. – mlienau

2

Bir denetleyiciye bağlayın ve istediğiniz şekilde geçiş yapabilirsiniz. Devre dışı özellik bağlı bir özelliktir, bu nedenle özellik değiştiğinde, şablon güncellenir.

+0

Bir denetleyiciye bağladığımda, HTML ' 'Düzenle: bir [fiddle] ekledi (http://jsfiddle.net/RPWnX/) – mlienau

+1

Bu durumda 'Binding', 'disabledBinding' ile biten ayrı bir özelliğe bağlama yolları yerleştirirsiniz. –

+0

İşleri şimdi teşekkürler! – mlienau

İlgili konular