5

Używam Knockout.js dla aplikacji klienta rich i będzie ona zawierała dużą liczbę plików knockout.js ViewModels. W rozwoju zauważyłem dwa sposoby tworzenia knockout.js ViewModels. Pierwszy sposób.Wyświetlenie deklaracji widoku Knockout.js. Istnieją dwie metody:

function AppViewModel() { 
this.firstName = ko.observable("Bert"); 
this.lastName = ko.observable("Bertington");} 

Drugi sposób.

var appViewModel = { 
this.firstName = ko.observable("Bert"), 
this.lastName = ko.observable("Bertington")}; 

Czy istnieją jakieś szczególne różnice w tych dwóch metod deklarowania ViewModels? W knockout.js official page examples użyli pierwszego sposobu. Jednak w systemach innych producentów, takich jak Knockout-validations.js, zastosowano drugą metodę. Której metody powinienem użyć? Jakieś szczególne korzyści z jego używania?

Dowiedziałem się, czy używam pierwszej metody, to nie mogę użyć Knockout-validations.js ramy. Jestem bardzo zdezorientowany w tej sprawie. Każdy komentarz jest doceniany.

Dziękuję.

+0

Oto kolejny link, który może pomóc: http://stackoverflow.com/questions/9589419/difference-between-knockout-view-models-declared-as-object-literals-vs-functions –

Odpowiedz

3

Pierwszy sposób definiuje konstruktor obiektu, ale nie tworzy nowego obiektu, można przekazywać argumenty w ten sposób. Jeśli tworzysz wiele obiektów/modeli, byłoby to zdecydowanie mniej przylegające niż drugi sposób.

Drugi sposób polega na użyciu składni inicjalizatora obiektu, co powoduje utworzenie nowego obiektu w pamięci z dowolnymi polami, które ustawiono. Generalnie powoduje to mniejszy rozmiar kodu; jeśli tworzysz dwa obiekty o tych samych lub podobnych strukturach, użyj pierwszego sposobu.

Nie ma powodu, dla którego nie można użyć pierwszego zamiast drugiego. Po prostu tworzenie nowego obiektu i przekazywanie go tam, gdzie jest to potrzebne.

to:

function AppViewModel(fName, lName) { 
    var self = this; 
    self.firstName = ko.observable(fName); 
    self.lastName = ko.observable(lName); 
} 
... 
var appViewModel = new AppViewModel("Bert", "Bertington"); 

tworzy sam cel, jak poniżej:

var appViewModel = { 
    this.firstName = ko.observable("Bert"), 
    this.lastName = ko.observable("Bertington") 
}; 

Pierwszy tylko pozwala na bardziej AppViewModel S mają być utworzone, na przykład new AppViewModel("Joe", "Shmoe")

2

Różnica, którą opisujesz, nie jest specyficzna dla bibliotek typu nokaut lub nokaut, raczej jest to problem na poziomie językowym szeroko dyskutowany wśród społeczności JavaScript. Douglas Crockforda, guru JavaScript, posiada dwa artykuły po obu stronach Dziedzina:

Z rozrzuconych postów, artykułów blogu, a rozmowy z programistów JavaScript wydaje się, że społeczność dąży do przyjęcia stylu prototypowego. Powinieneś używać dowolnego stylu, który preferujesz. Na podstawie dokumentacji wygląda na to, że biblioteka Knockout-Validation została zaprojektowana z myślą o stylu klasycznym. Zaletą klasycznego stylu w tym przypadku byłoby po prostu, że jest łatwiejszy w użyciu z biblioteką Knockout-Validation. Wadą prototypowego sposobu jest to, że jest trudniej korzystać z tej biblioteki.

Powiązane problemy