Knockout Klickbindung seltsames Verhalten

7

Es wird versucht, eine grundlegende Knockout-Klickbindung einzurichten, wie im folgenden Beispiel gezeigt:

%Vor%

Geige: Ссылка     

Allerdings laufen zwei Probleme auf:

  1. Die Bindung bewirkt, dass der Wert mode() als beginnt 'automatisch', obwohl wir es explizit auf 'manuell' initialisieren.
  2. Wenn auf eine Schaltfläche geklickt wird, zeigt die JavaScript-Konsole Folgendes an:
  

Uncaught TypeError: h.apply ist keine Funktion

    
Yarin 20.04.2015, 19:34
quelle

3 Antworten

17

Sie müssen Ihre Click-Handler in Funktion einbinden:

Ссылка

%Vor%

siehe Ссылка

    
dfperry 20.04.2015, 19:37
quelle
6

Das Problem ist, dass Ihr click -Handler die Funktion aufruft, anstatt die Referenz zu verwenden.

Deshalb enden Sie mit mode mit auto , weil click: $root.mode('automatic') den beobachtbaren Wert festlegt.

Versuchen Sie es stattdessen:

%Vor%     
haim770 20.04.2015 19:40
quelle
3

Entweder die Antwort .bind oder die Antwort function() {} funktioniert; Im Allgemeinen möchte ich jedoch vermeiden, Funktionen in meinen Ansichten zu definieren, wo dies möglich ist, und stattdessen diese Logik in das ViewModel verschieben.

Also eine andere Option, und die, mit der ich wahrscheinlich in diesem Fall gehen würde, ist eine viewModel.setToManual() Funktion und eine viewModel.setToAutomatic() Funktion zu definieren.

Dann wäre der Binding-Handler nur

%Vor%

Dies ist nicht nur in der Ansicht sauberer, sondern schützt auch die Ansicht vor Änderungen an der Struktur des ViewModels, solange das Verhalten von setToAutomatic (und wahrscheinlich ein vergleichbarer isAutomatic ) erhalten bleibt.

    
Retsam 20.04.2015 20:28
quelle

Tags und Links