2013-05-28 8 views
8

sonra tıklama olayı harekete geçirilen sonra nakavt ile bir girdi odağı ayarlamak için çalışıyorum ama DOM ile birleştirilmesi olmadan idare temiz bir şekilde bulamadık. İşte JS kodunun ben edilir:Knockout.js giriş odağı tıklama

İşte
<input type="text" data-bind="value: text" /> 
<a href="#" data-bind="click: addItem">Send</a> 

<ul data-bind="foreach: items"> 
    <li data-bind="text: $data"></li> 
</ul> 

JsFiddle örnektir:

(function() { 

    var vm = { 
     text: ko.observable(), 
     items: ko.observableArray([]) 
    } 

    vm.addItem = function() { 
     vm.items.push(vm.text()); 
     vm.text(null); 
    } 

    ko.applyBindings(vm); 

}()); 

Bu

benim DOM olduğunu ben sonra giriş odak ayarlamak istediğiniz ne http://jsfiddle.net/srJUa/1/

vm.addItem tamamlandı. Bunun nasıl temiz hale getirilebileceği hakkında herhangi bir fikrin, örneğin özel bir nakavt bağlama ile? The "hasfocus" binding:

cevap

14

Nakavt yerleşik bir odak manipüle bağlayıcı vardır.

Dolayısıyla, yalnızca görünüm modelinizde bir boolean özelliği oluşturup girişinize bağlamanız ve girişi odaklamak istiyorsanız, özelliği true olarak ayarlamanız gerekir.

Senin durumunda size text doğrudan özelliğine bağlama, bu yüzden olması gerektiği herhangi bir metin yok olduğunda odağı olabilir:

<input type="text" data-bind="value: text, hasfocus: !text()" /> 

Demo JSFiddle.

+0

Teşekkürler :) sadece aklıma geldi ve ben de aynı şekilde çözdüm: http://jsfiddle.net/srJUa/2/ – tugberk

4

Tamam, bağlayıcı hasfocus yararlanarak sorunu çözdük:

(function() { 

    var vm = { 
     text: ko.observable(), 
     items: ko.observableArray([]), 
     isFocused: ko.observable() 
    } 

    vm.addItem = function() { 
     vm.items.push(vm.text()); 
     vm.text(null); 
     vm.isFocused(true); 
    } 

    ko.applyBindings(vm); 

}()); 

HTML:

<input type="text" data-bind="value: text, hasfocus: isFocused" /> 
<a href="#" data-bind="click: addItem">Send</a> 

<ul data-bind="foreach: items"> 
    <li data-bind="text: $data"></li> 
</ul> 

Çalışma örnek: http://jsfiddle.net/srJUa/2/

bu en iyi yolu olup olmadığından emin değil, gerçi.