2014-09-19 16 views
5

Bir select elemanında bir sorunum var. change olayı için bir bağ oluşturuyorum ve seçili öğeyi el ile değiştirdiğimde çalışır, ancak seçim öğesi belirtilen bir değerle bağlanıyorsa, değişiklik işlevi çağrılamaz.knockoutjs - select olayını ilk defa başlatmıyor

Benim html şu şekildedir: mülkiyet myField farklı bir değeri varsa '' değişim fonksiyonu çalıştırır böylece

<select data-bind="value: myfield, event:{change:myfunction}"> 
    <option value="">Select an element</option> 
    <option value="1">Element 1</option> 
    <option value="2">Element 2</option> 
</select> 

buna ihtiyacım var.

Bir öğeyi seçtiğimde, işlevlerim işlevini çağırır ve her şey yolundadır, ancak sayfa yüklendiğinde ve örneğin alanım "1" değerine sahipse, işlev çağrılamaz ve bu işlevin İnşallah, umarım benim problemimi çözebilirsin.

+0

Sorununuzu anlamaya çalışıyorum. Sorunuzun bu bölümünü açıklayabilir misiniz, biraz detay verebilir misiniz? "ama eğer seçen eleman belirli bir değerle bağlanıyorsa" –

+0

Teşekkürler arkadaşım, bak, eğer bir eleman seçtiğimde, işlevim çağrı ve her şey yolunda, ancak sayfa yüklendiğinde ve örneğin alanım değere sahipse " 1 "işlev çağırmıyor ve bu işlevin çalıştırılmasına ihtiyacım var, umarım benim problemimi çözebilirsin. –

cevap

20

Knockout ile mücadele ediyorsanız, kullanarak burada :-) sorun yaşıyorsunuz. the selectedOptions documentation ve options binding üzerinden veya belki de KO tutorials'dan bazılarını okumalısınız.

Temel olarak, hiçbir zaman DOM öğelerinin kendiniz için change olayını işlemek istersiniz. Knockout tam olarak şu anlama gelir: DOM girişleri değiştiğinde ViewModel'inizi güncelleyin. Ayrıca, Knockout da sizin için option s üretiminden sorumlu olmalıdır.

Sizin html şöyle görünmelidir: aslında ihtiyaç açılan bir değişikliğe abone olmak durumunda yukarıda gösterildiği gibi, yerine myfield değişikliklere abone

var ViewModel = function() { 
 
    var self = this; 
 
    self.availableOptions = [1, 2]; 
 
    self.myfield = ko.observable(); 
 

 
    self.myfield.subscribe(function(newValue) { 
 
     // Handle a change here, e.g. update something on the server with Ajax. 
 
     alert('myfield changed to ' + newValue); 
 
    }); 
 
} 
 

 
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<select data-bind="options: availableOptions, 
 
         value: myfield, 
 
         optionsCaption: 'Select an element'"> 
 
</select>

.

+1

Aynı şeyi ben yazıyordum. Sana bir nokta verdim. :) –

+0

Merhaba Jeroen, haklısın, ben çok iyi kullanıyorum, ama şimdi iyi bir ciltleme yapmak için pek çok değişiklik yapamıyorum (PM ile konuşun :)), bu yüzden bu yüzden "Düzelt", belki bir fikrin var mı? –

+0

Bunu düzeltmenin en kolay yolu KO'yı doğru kullanmaktır. Başka bir çözüm IMO daha çok iş olacaktır. – Jeroen