2012-05-10 38 views
19

Benzer soru olarak: Select element's initial valueKnockoutJS Seçenekler ve Seçilen Değer

select elemanın başlangıç ​​değeri ayarlanırken bir sorun yaşıyorum. Temel olarak, açılır listeyi doldurmak için sunucudan gelen bir tohum verisi listesi var ve seçilen değerin, varlıktan seçilmesi gereken öğeyi temsil etmesini istiyorum.

veri modelinin seçilen değer tohum veri nesne başvurusu eşit değildir, çünkü

, hiçbir şey seçilir.

Şu anda, tohum verinin eşdeğer, eşit ayarlayarak, doğru seçilmiş değerini bulmakta, her bir varlık döngü ediyorum, sonra Nakavt o kadar tel bilir.

daha zarif bir çözüm bu var mı? Daha ayrıntılı bilgi için basitleştirilmiş bir örnekle karşılaştım ... http://jsfiddle.net/hbrYM/14/

cevap

34

Seçilen Değer referansının eşleşmediğini doğru tahmin ettiğinizde, KO bu öğeyi seçmez. işe bu almanın yolu basit bir tür eşitlik başarılı olabilir ve doğru değer seçilir seçilmez, seçilen değer karmaşık nesneyi kaydetmek ve bunun yerine ID seçin getirmemektir.

http://jsfiddle.net/VLTFB/3/

O anlamda :)

<select data-bind="options: seedData, 
        optionsText: 'firstName', 
        optionsValue: 'ID', 
        value: data.selectedValue"> 

DÜZENLEME yaparsa (bağlama seçenekleri optionsValue seçeneği kullanmak gerekir doğru yeniden seçebilirsiniz bahsedildiği gibi

hesaplanmış (test edilmemiş) öğe.

vm.currentlySelected = ko.computed(function() { 
    for (var i = 0; i < this.seedData().length; i += 1) { 
     var data = this.seedData()[i]; 
     if (data.ID === this.selectedValue()) { 
      return data; 
     } 
    } 
    return null; 
}, vm); 

Bu yardımcı olur umarım.

+0

teşekkürler şekilde cevap verirken için, çok mantıklı. Şu anda (sadece ID değil) nesneyi geri gönderiyorum ki bu da seri hale getiriliyor ve kalıcı oluyor. Ben gerçekten bu UI içinde çok farklı seçimler var çünkü bu kadar tel kablo için "talimat" bir yol olduğunu umuyordum ... – aswallows

+1

Sadece sunucudan seçtikleri kez nesneyi oldukça kolayca geri gönderebilirsiniz geliyor, sadece kimliği gönderin. Yeni seçilen bir geri göndermeniz gerektiğinde, o anda seçili nesneyi geri yükleyen bir hesaplamanız yeterlidir (düzenlemeye bakın). Aslında bu şekilde yapmak daha yalın, tohum verisine zaten sahipsin, o yüzden neden tüm bu ekstra bilgiyi tekrar göndermekten çekiniyorsun? – madcapnmckay

+0

Geri bildirim için teşekkürler! Bu yaklaşımı kullanarak bir göz atacağım. – aswallows