2012-03-26 31 views
8
Sadece ember.js ile ayaklarım ıslak alıyorum

düğme durumunu etkin Cilt ve ben anlayamıyorum eminim şey isabet ettik.ember.js

Seçilmiş bir nesne denetleyicim var. Şu anda seçilen model olan bir Ember.Object olan içeriğe sahiptir. Modelin bir özelliği (isDirty) vardır ve temelde formdaki kaydetme düğmesinin yalnızca nesne kirli olduğunda ve kaydedilmesi gerektiğinde etkinleştirilmesini istiyorum.

Formu iyi bir şekilde bağlamayı başardım ancak kaydetme düğmesindeki isEnabledBinding özelliği ya bir şey yapmıyor ya da bağlayıcıyı düzgün şekilde bağlamam.

benim temel set up gösteren bir jsfiddle hazırladık.

http://jsfiddle.net/blargity/fqc73/1/

nasıl IsDirty doğrudur yalnızca düğme etkin olması alabilirim? Seçilen nesne denetleyicisindeki içerik özelliği değişirse, bağlamalar da çalışmalıdır.

cevap

10

sorun Ember.Button üzerinde hiçbir isEnabled mülkiyet olmasıdır. disabled özelliğine bağlamanız gerekir.

Bir olasılık sizin için işleyen bir özel Ember.Button oluşturmaktır, bkz. http://jsfiddle.net/LabpW/.

Gidon:

{{#view App.SaveModelButton modelBinding="model"}}Save{{/view}} 

JavaScript:

App.SaveModelButton = Ember.Button.extend({ 
    disabledBinding: Ember.Binding.not('model.isDirty') 
}); 

kullanılan Ember.Binding.not şu şekilde görünecektir kendi bilgisayarlı özelliği, yazma sadece bir kısayoldur:

App.SaveModelButton = Ember.Button.extend({ 
    disabled: function() { 
     return !Ember.getPath(this, 'model.isDirty'); 
    }.property('model.isDirty').cacheable() 
}); 
  • Sen create ve extend karışık: sınıflar için örnekleri için create ve extend kullanmak


    Ben de senin kod biraz refactored. Orada this

  • Bu sınıflar için örnekleri ve büyük harf küçük hali kullanmak için bir kongre tür hakkında iyi blog yazısı, bu yüzden yerine App.Controller

+0

Cevabınız için teşekkürler ve stil sorunlarımı düzeltin. – KevinBrownTech

+0

Bu harika çalışıyor, ancak Ember'de Ember.Button'da bir kullanımdan kaldırılma uyarısı var. (V1.0.pre-48-g138fbdf kullanıyorum) – webjprgm

14
ben bunu yapmanın bir yolunu bulmuş

ait App.controller olmalıdır şimdi kullanılmayan Ember.Button kullanmadan. gidon şablonunda

: görünümünde

<button {{action "save" target="controller"}} {{bindAttr disabled="view.isNotDirty"}}>Save</button> 

:

isNotDirty: function(){ 
    return !this.get('controller.content.isDirty') 
}.property('controller.content.isDirty').cacheable() 

(Ben Ember sürümü ile Ember.Binding.not yok.Belki de güncellemeliyim, ancak dokümanlar bunu göstermiyor ya da belki de kaldırılmıştı.)

+2

Ember 1.4.0-beta.6'da, doğru bağlanma {{bind-attr disabled = ...}} ' – jevon

+0

Tipik olarak bind-attr Bir denetleyicinin içinde bir özellik ile kullanılır ancak bazen özellik görünümde. Bu cevap, tam olarak nasıl yapıldığını gösterdiğinden ('görünümü' önekini kullanarak) büyüktür. –