Oto jsfiddle, aby pokazać, jaki jest problem:

http://jsfiddle.net/BOBLAUER/BGVV4/

Próbuję wystrzelić zdarzenie zmiany po zaktualizowaniu pola tekstowego. Niestety, wewnątrz metody subskrypcji wartość skrzynki tekstowej nie została jeszcze zaktualizowana, więc gdy wyznaczę zdarzenie zmień, jest ono wystrzelone zbyt szybko.

Muszę wystrzelić zdarzenie zmiany, ponieważ mam 3rd kodu partii, który jest poza moją kontrolą, która opiera się na zdarzeniu zmiany.

Jakieś sugestie?

11
Bob Lauer 26 lipiec 2012, 18:56

2 odpowiedzi

Najlepsza odpowiedź

Prostym rozwiązaniem jest owijanie połączenia do $ ("# Tekst1"). Zmień () w ustalaniu za pomocą limitu czasu 0. Wystarczy, aby pozwolić nokautowi zrobić aktualizację (synchroniczną) do wartości textbox, zanim Dostaje Handler Handler Zmiana JQuery wywołany.

Odwiladłem twoje skrzypce, aby zademonstrować: http://jsfiddle.net/surya/1//

Jeśli jest to coś, co musisz zrobić, lepsze rozwiązanie jest prawdopodobnie owijanie tego zachowania w niestandardowym wiązaniu, w którym "aktualizacja" zwrotna wiązania wystrzeliłoby zdarzenie JQuery Zmień na zaktualizowanym elemencie.

9
bmode 26 lipiec 2012, 18:21

Bmode ma rację, to zrobi to niestandardowe wiązanie. Chociaż ta odpowiedź jest nieco późna, oto wiązanie w przypadku, gdy ktoś następnie czytał ten post. Aktualizuje wartość tekstu przy użyciu jQuery - Dom jest obecnie aktualizowany w celu pracy dla 3RD Party Code do pracy - więc wystrzeliwuje zdarzenie zmiany.

ko.bindingHandlers.valueAndFireChange = {
    update: function(element, valueAccessor) {
        var val = ko.unwrap(valueAccessor());
        if (val == undefined) return;
        $(element).val(val);
        $(element).change();
    }
};

Oto zaktualizowana wersja skrzypienia Boba pokazująca to w akcji:

http://jsfiddle.net/BGVV4/17/

Zmieniłem alerty do Console.log, więc będziesz potrzebował konsoli, aby zobaczyć przydatne informacje.

0
sifriday 21 lipiec 2014, 18:00