2013-07-07 10 views
5

Mam prosty ViewModel knockoutjs. ale zanim zastosuję wiązanie z tego modelu do mojego widoku, potrzebuję najpierw zainicjować go lub ustawić wartość tablicy z niektórymi danymi (format JSON), które dostanę z serwera za pośrednictwem AJAX.initialize Knockout ViewModel z danymi json przed zastosowaniem najlepszych praktyk wiązania

Wiem, że mogę utworzyć obiekt mojego modelu, wykonać zapytanie ajax, a następnie zainicjować moją tablicę modeli. Tak:

function AppViewModel() { 
    var self = this; 
    self.Servers = ko.observableArray([]);//this one 'll be filled by data from server 
} 
var MyViewModel = new AppViewModel(); 
MyViewModel.Servers = ko.mapping.fromJSON(json_data);//make ajax call to get json_data. 
ko.applyBindings(MyViewModel); 

Czy to dobra praktyka, czy istnieje lepszy.

Odpowiedz

1

Wydaje mi się, że to świetny sposób, aby to zrobić, przynajmniej w kontekście, który zapewniasz. mapping plugin's documentation zawiera sekcję o żądaniach AJAX, a także zawiera "zaawansowaną" sekcję, która pomaga śledzić klucze obiektów serwera, dzięki czemu wysyłanie aktualizacji na serwer staje się łatwiejsze.

Kolejnym dobrym źródłem jest loading & saving tutorial. Nie korzysta z wtyczki mapowania, pokazując bardziej podstawowe rzeczy dotyczące obsługi operacji CRUD za pośrednictwem żądań AJAX.

0

Wtyczka Knockout Mapping wydaje się być na swojej drodze. Oryginalnym autorem jest/był looking for maintainers, w którym to momencie wydawało się, że konsensus polegał na migracji użytkowników do nowszej wersji Knockout ViewModel plugin.

Nie wiem, czy to najlepsza praktyka, ale podpiszę, jak robię krok JSON-to-ViewModel. Moje maszyny wirtualne są dość złożone, więc przechowuję je w innym pliku js i przekazuję dane do konstruktora. To sprawia, że ​​mój skrypt w-strona wyglądać następująco:

var MyViewModel = new AppViewModel(json_data); 
ko.applyBindings(MyViewModel); 

Posiadanie jednej linii sprawia, że ​​jest nieco bardziej wygodne w testów jednostkowych (jeden mniej rzeczy zapomnieć o).

+0

Przepraszam, ale nie zrozumiałem. czy możesz wyjaśnić więcej lub pomóc mi z pełnym przykładem –

Powiązane problemy