2013-06-25 2 views
8

Mam widok Ember.Select, w jaki sposób dodać/powiązać wyłączony atrybut do znacznika opcji (NIE całego pola wyboru).Jak dodać atrybut "Wyłączony" do opcji w Ember.Select

tj. Chciałbym osiągnąć następujący wynik.

<select> 
    <option value="1" disabled>I am a disabled option</option> 
    <option value="2">Im selectable</option> 
</select> 
+0

Czy ta pomoc..http: //stackoverflow.com/questions/11457206/emberjs-how-to-disable-ember-select – PSL

+0

Nie niestety, to wyłącza całe pole wyboru. Chcę wyłączyć tylko niektóre opcje w polu wyboru. – jennas

Odpowiedz

13

Widok Ember.Select nie robi tego po wyjęciu z pudełka. Konieczne będzie dodanie niestandardowego atrybutu wiążącego dla disabled i odpowiedniej właściwości obliczeniowej, aby poinformować Ember, jak go znaleźć.

Proste podejście polega na dodaniu wyłączonego atrybutu do elementu treści/danych używanego do renderowania zaznaczenia.

App.ApplicationController = Ember.Controller.extend({ 
    choices: function() { 
    return [ 
     Ember.Object.create({firstName: "Lorem", id: 1}), 
     Ember.Object.create({firstName: "Ipsum", id: 2, disabled: true}), 
     Ember.Object.create({firstName: "Dolor", id: 3}), 
     Ember.Object.create({firstName: "Sit", id: 4}), 
     Ember.Object.create({firstName: "Amet", id: 5}) 
    ]; 
    }.property() 
}); 

i ponowne otwarcie lub przedłużyć widok Ember.SelectOption dodając atrybut disabled komputerową nieruchomości.

Ember.SelectOption.reopen({ 
    attributeBindings: ['value', 'selected', 'disabled'], 

    disabled: function() { 
    var content = this.get('content'); 
    return content.disabled || false; 
    }.property('content'), 

}); 

Oto działa jsbin. Zauważ, że opcja ipsum jest wyłączona.

+0

Dziękuję. Mam nadzieję, że to pewnego dnia dotrze do rdzenia;) – jennas

+0

Podoba mi się to podejście, ale jakikolwiek pomysł, jak można przejść w atrybutach danych wymagających dzielonych nazw? – sbauch

+0

Użyłem '.property ('content.disabled')' zamiast ".property ('content')', ale poza tym działa to dobrze. – sblair

2

można obsługiwać go w didInsertElement haku w widoku niestandardowego Ember.Select ..

didInsertElement: function() { 
    this.$('option[value="1"]').attr('disabled', true); 
} 
+1

Nie tak naprawdę sposób ember. powinieneś zamiast tego wiązać atrybuty kierownicy do swoich danych. –