2013-05-31 26 views
14

Ostatnio coraz częściej widzę termin "wiązanie" i "wiązanie na żywo", szczególnie w frameworkach JavaScript takich jak Ember.js, Can.js, Knockout.js i Backbone.js, a bardziej tradycyjnie w Cocoa. i Cel-C, i zastanawiam się, co dokładnie jest wiążące? (i czym dokładnie jest "live-binding"?).Czym dokładnie jest powiązanie?

Wygląda na to, że z luźnego sensu możemy "związać A do B", a wtedy możemy powiedzieć: "A jest związany z B", co oznacza, że ​​zmiany w B będą odzwierciedlone w A - automatycznie, bez konieczności martwienia się o ustawienie obserwatora, ale obserwator jest ustawiany wcześniej automatycznie i powiadamiany automatycznie po zmianie B.

A kiedy to zrobimy, tworzymy "wiązanie".

I z dosłownym znaczeniu, wydaje się, że kakao i Objective-C określa to tak: wiążąca jest nieruchomośćfoo obiektu A, a ta właściwość obserwuje i się przebrać do wartości nieruchomości bar obiektu B. Jak to się dzieje, nie obchodzi nas to i ma być ukryte (jak czarne pudełko), a zwykle jest realizowane przez Wzorzec Obserwatora. Zatem słowo "wiązanie" w rzeczywistości oznacza "właściwość", a nie działanie - i ta własność obserwuje i zmienia się na tę samą wartość, co inna właściwość.

To powiązanie nie ogranicza się do elementów interfejsu użytkownika związanych z danymi. Może to być zewnętrzny, większy element interfejsu użytkownika, który zawiera mniejszy element elementu interfejsu użytkownika, a zewnętrzny element UI ma właściwość, która jest powiązana z właściwością wewnętrznego elementu UI. Lub może to być jedna właściwość danych innych niż interfejs użytkownika związana z inną właściwością danych inną niż UI.

Czy to właśnie jest oprawa? A co z powiązaniem na żywo?

+4

Tylko moje dwa centy, IMO są coraz to absolutnie rację co jest wiążąca, a żyć wiążąca jest prawie tak samo pod inną nazwą dla niego. – intuitivepixel

+0

Myślę, że bardzo dobrze odpowiedziałeś na swoje własne pytanie. :) –

Odpowiedz

0

Nie jestem pewien co do historii, ale przypuszczam, że termin "wiązanie" w tym znaczeniu wywodzi się z terminu "wiązanie danych". "wiązanie danych" jest w rzeczywistości akcją: zapełnia formanty interfejsu użytkownika wartościami z rzeczywistych danych, model AKA, na przykład gdy pola w formularzu są wypełniane danymi z bazy danych i są automatycznie aktualizowane, korzystając z wzorca obserwatora, o którym wspomniałeś . Myślę, że główne rozróżnienie z wiązaniem jest jednokierunkowe a dwukierunkowe: w dwukierunkowym wiązaniu danych dane wejściowe użytkownika są również synchronizowane z powrotem do modelu, a nie tylko dane synchronizowane z modelu do widoku.

"Wiązanie" jest czasownikiem, a forma czasownika "wiązania danych" będzie "wiążąca dane" lub "wykonująca wiązanie danych". Drugi przykład pokazuje, że "wiązanie danych" jest również rzeczownikiem, które można zdefiniować jako "akt wiązania właściwości danych/modelu z właściwościami UI/view". Jeśli chodzi o samą rzeczownikową wersję "wiązania", myślę, że masz rację, że zwykle odnosi się do pojedynczego powiązania między dwiema właściwościami. Aby to wykazać wizualnie załóżmy, że kropki reprezentują dwie właściwości, które są połączone ze sobą:

• ----- •

„wiązanie” tu jest linia między nimi.

Aby uzyskać bardziej szczegółowe, jednokierunkowa wiązania mogą być reprezentowane za pomocą jednego strzałka:

• ----> •

i wiążące się z dwoma strzałkami dwukierunkowa:

• < ---> •

"powiązanie na żywo" to termin używany tylko do wskazania, że ​​używany jest wzorzec Obserwator.Sądzę, że chęć odróżnienia "żywych powiązań" prawdopodobnie pochodzi od twórców stron internetowych, którzy wcześniej pracowali z frameworkami, w których wiązanie danych zdarzało się tylko raz na żądanie HTTP, kiedy strona była ładowana po raz pierwszy. Teraz, gdy ciężkie aplikacje internetowe stają się normą (częściowo dzięki ajaxowi), nie ma powodu, aby nie używać wzorca Obserwatora, jak sugeruje oryginalna definicja MVC, więc "wiążące na żywo" jest prawdopodobnie niepotrzebnym terminem w odniesieniu do RIA lub natywne aplikacje komputerowe lub mobilne.

Na marginesie oryginalna wizja MVC Trygve'a Reenskauga (on ją wymyślił) jest zasadniczo odzwierciedleniem modelu mentalnego użytkownika końcowego w systemie, tak aby "Model" był czymś, co użytkownik niemal bezpośrednio manipuluje (lub przynajmniej czuje się w ten sposób dla użytkownika). Tak więc wzorzec Obserwatora (lub przynajmniej pewien mechanizm utrzymujący Model i Widok zsynchronizowany bez ponownego ładowania strony) jest dla niego niezbędny, a środowiska programistyczne, które mają większość kodu po stronie serwera, nie są tak naprawdę MVC, jak pierwotnie zostały pomyślane, ale raczej wariant, który ma tę samą ogólną koncepcję pod względem organizacji kodu. Nowoczesne środowiska JavaScript dla aplikacji bazujących na klientach umożliwiają tworzenie MVC do tworzenia stron internetowych.

Wracając do punktu, który zadałeś w pytaniu, myślę, że również masz rację, gdy mówisz, że powiązanie niekoniecznie jest po prostu między właściwością modelu a właściwością widoku; może to być między dwiema właściwościami modelu (zwykle w różnych modelach) lub między dwiema właściwościami widoku. Ale nie zgodziłbym się z twoim stwierdzeniem, że "wiązanie" jest tylko rzeczownikiem w odniesieniu do programowania - oczywiście w języku angielskim jest to forma rzeczownika czasownika "wiązanie", innymi słowy "akt wiązania" i uważam, że jest to ważne użycie również w programowaniu. Zasadniczo mówię, że ma on podwójne znaczenie, ale uważam, że zaproponowana definicja jest najbardziej powszechna. Oto moja próba sformalizowania definicji:

Wiązanie.

  1. Połączenie dwóch właściwości (zwykle, w dwóch różnych obiektów), które zachowuje właściwości zsynchronizowane ze sobą, to znaczy o tej samej wartości. Synchronizacja może być jednokierunkowa lub dwukierunkowa.
  2. Czynność inicjowania takiego połączenia.
+0

Jeśli chcesz dowiedzieć się więcej o pomysłach Trygve Reenskaug w odniesieniu do modelu mentalnego użytkownika końcowego, polecam oczywiście wcześniejsze artykuły o MVC, ale także sprawdź jego nowszy paradygmat (który jest komplementarny z MVC) , DCI, co dodatkowo pomaga w odzwierciedleniu modeli mentalnych użytkowników w kodzie. [Ten artykuł] (http://www.artima.com/articles/dci_vision.html) to dobry punkt wyjścia. –

+2

Czy mógłbyś proszę odpowiedzieć na własne pytanie, lub zaakceptować powyższą odpowiedź od Matta (co moim zdaniem jest doskonałe) ... tak, że ta kwestia została usunięta z sekcji "pytania bez odpowiedzi" tutaj? Dzięki! :) –

0

Wiązanie w bardzo prostym znaczeniu oznacza linkowanie, załóżmy, że masz pasek postępu i zmienną X, za każdym razem, gdy naciskasz przycisk, wartość przyrostów X. używając Binding możesz wziąć wartość X (za każdym razem, gdy wzrasta) i pokazać ją na pasku postępu. W poniższym wierszu kodu w języku C# "pb" znajduje się pasek postępu, a TapCount to zmienna, w której zapisywane są wszystkie stuknięcia. To pokazuje wartość „PB” został zobowiązany do zmiennej TapCount

public void tapping 
{  
pb.Value = TapCount; 
} 
0

To nie jest odmienna od pierwotnego stosowania metody .bind w waniliowym javascript: powiązać zakres przedmiotu do metody.

Rozważ this.iterable.map(this.flush) i this.iterable.map(this.flush.bind(this)). Po pierwsze, w prosty sposób uruchamiamy metodę dla każdej interakcji właściwości iterowalnej, ale aby metoda this.flush mogła uzyskać dostęp do właściwości this, należy powiązać ją z this.

W ten sam sposób, w ramach takich jak Ember, model jest deklaracją. Aby wypełnić ten model ze zdalnego źródła, potrzebujesz instancji. Aby zmodyfikować model z kierownicy, potrzebujesz instancji. Jeśli Twój interfejs użytkownika natychmiast wpłynie na instancję modelu - są powiązane.

Pseudo-kodowane: UI.view.bind(modelInstance) RemoteSource.bind(modelInstance)

"Live-Binding", w moim doświadczeniu, jest wiązanie danych do zdalnego źródła natychmiast na zmiany w interfejsie użytkownika.

Pseudo-kodowane: UI.view.bind(modelInstance) RemoteSource.bind(modelInstance) modelInstance.onChange(RemoteSource.update.bind(modelInstance))