2016-06-23 13 views
0

Ich versuche, einen benutzerdefinierten Binder hinzufügen für hasFocus ähnlichen =Knockout benutzerdefinierte Bindung Update nicht funktioniert

ko.bindingHandlers.hasfocus arbeitet {

//update the control when the view model changes 
update: function (element, valueAccessor) { 
    ko.unwrap(valueAccessor()); 
    alert('update'); 
    setTimeout(function() { 
     alert(3); 
     if (value 
      && element.offsetWidth && element.offsetHeight 
      && document.activeElement && document.activeElement != element) { 
      element.focus(); 
      ko.utils.triggerEvent(element, "focusin"); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously 
     } 
    }); 
} 

};

Aber es kommt nie in diese Funktion jemals. Ich folge diesem Beispiel

http://jsfiddle.net/mbest/tAGmp/

Die Sache ist, ist mein Eingabefeld im Start nicht sichtbar. Wenn ich auf einen Ort klicke, wird er sichtbar. Das Eingabefeld sieht so aus:

<input type="text" data-bind="hasFocus: true" /> 

Ich habe versucht, es mit hart Code-Wert wahr zu machen. Wenn es funktioniert, dann werde ich es zu etwas Observablen ändern. Irgendwelche Gedanken?

+0

Sie überschreiben die gesamte 'hasFocus'-Bindung, also entfernen Sie die eingebaute' init'-Funktion. Fügen Sie Ihre benutzerdefinierte Funktion wie im Beispiel hinzu: 'ko.bindingHandlers.hasfocus.update = function (element, valueAccessor) {Ihr Code hier" ' – nemesv

Antwort

0

Ich habe die Geige hier aktualisieren. Wie Sie in der Konsole sehen können, ist es zunächst gebrannt und wenn ein Wert eingegeben wird.

http://jsfiddle.net/tAGmp/11/

ko.bindingHandlers.hasfocus = { 
    update: function(element, valueAccessor) { 
     console.log('update'); 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     setTimeout(function() { 
      if (value 
       && element.offsetWidth && element.offsetHeight 
       && document.activeElement && document.activeElement != element) 
      { 
       element.focus(); 
       ko.utils.triggerEvent(element, "focusin"); // For IE, which doesn't reliably fire "focus" or "blur" events synchronously 
      } 
     },0); 
    } 
}; 

hofft, dass dies hilft.

Verwandte Themen