2013-06-07 11 views
8

Mam problem z dodaniem przedłużacza nokaut do obserwowalnych po ich utworzeniu. W poniższym przykładzie przedłużacz działa na foo za każdym razem, gdy wartość zmienia się zgodnie z oczekiwaniami, ale tylko raz, po raz pierwszy wywoływana, dla bar.Stosowanie przedłużaczy typu knockout po mapowaniu

var viewModel = function(){ 
    var self = this; 

    self.foo = ko.observable(1).extend({ numeric: 1 }); 

    self.bar = ko.observable(1); 

    self.bar.extend({ numeric: 1 }); 
}; 

Zasadniczo jestem mapowania duży obiekt JSON i chciałby dodać przedłużacze po mapowanie doszło do pewnych właściwości. Czy istnieje prosty sposób na zrobienie tego?

Poniżej znajduje się jsfiddle pokazujący problem:

http://jsfiddle.net/LgxTn/

Odpowiedz

8

Problemem jest to, że masz przedłużacz jest stworzenie nowego obserwowalne (w oparciu o obserwowane to rozszerzenie). A ta nowa obserwowalna nie jest używana w twoim drugim wywołaniu do extend.

Aby rozwiązać ten problem (bez zmiany kodu z przedłużaczem) można przypisaćodpowiedzi od wywołanie extenddo tej samej nieruchomości To się nazywa.

Innymi słowy, dodać self.bar = przed swoim ostatnim wierszu, aby mieć to:

self.bar = self.bar.extend({ numeric: 1 }); 
+0

To rozwiązanie nie reaguje na szablon ponownego renderingu dla podsektorów obserwabli. Wypróbuj ten http://knockoutjs.com/documentation/extenders.html Przykład na żywo 2. – hawk

+0

Nie wiem, co masz na myśli. OP i I oparły nasz kod na tym samym 'ko.extenders.numeric' zamieszczonym na tej stronie dokumentacji. Opublikuj nową odpowiedź, jeśli Twoje podejście jest zasadniczo inne niż moje. –

+0

Może coś nieporozumienia, ale to nie działa zgodnie z oczekiwaniami, sprawdź http://jsfiddle.net/BqXed/ – hawk

Powiązane problemy