Unterschied zwischen isObservable und isSubscribable

8

Scheint, dass sie das gleiche Ergebnis zurückgeben, warum benutzen Sie eins über das andere?

%Vor%

Alle loggen wahr. Ссылка

    
Martin Hansen 28.04.2015, 08:05
quelle

1 Antwort

6

Also ist ein Subskribent ein Knockout-Objekt, das sich von Observablen oder Berechneten unterscheidet, aber sowohl Observablen als auch Berechnete erben. Ein Abonnement ist alles, was abonniert werden kann; alles, was Ereignisse auslösen kann, auf die andere Teile des Codes hören können. Von hier stammt die observable.subscribe(function() {}) -Funktionalität.

Eine beobachtbare Variable ist dagegen eine bestimmte Art von Subskription: Sie ist ein Subskribent, der einen Wert enthält und den neuen Wert an seine Abonnenten ausgibt, wenn sich dieser Wert ändert. Der "hat einen aktuellen Wert" Teil der beobachtbaren ist nicht ein fester Bestandteil der "abonnierbar", nur die "sendet Ereignisse an seine Abonnenten" Teil ist.

Es wird nicht viel benutzt, aber kann direkt Subskriptionen erstellen, und sie werden den ko.isSubscribable -Test bestehen, aber den ko.isObservable -Test nicht, daher der Unterschied zwischen diesen beiden Methoden.

Obwohl ich es persönlich in der Praxis nicht gesehen habe, dieser Blogpost gibt ein Beispiel dafür, wie Sie die ko.subscribable -Funktionalität nutzen oder erweitern können, indem Sie eine Pub / Sub-Schnittstelle über abonnierbare Elemente erstellen.

Die Beziehung wird in diesem Diagramm in der KO-Dokumentation zu benutzerdefinierten Funktionen veranschaulicht.

Beachten Sie jedoch, dass das obige Diagramm in einem Punkt ein wenig irreführend ist: ko.computed wird direkt von ko.observable abgeleitet und nicht direkt von ko.subscribable . Daher warum ko.isObservable(computed) wahr zurückgibt. Die durch das Diagramm angegebene Beziehung ist jedoch die Beziehung, die zum Erben von benutzerdefinierten Funktionen verwendet wird, die zu Knockout-Objekten hinzugefügt wurden. (Was sinnvoll ist, war das Thema der Seite der Dokumentation, auf der es gefunden wurde)

Wenn Sie also eine benutzerdefinierte Funktion für ko.subscribable.fn definieren, ist diese sowohl für Berechnungen als auch für Observable verfügbar ... Wenn Sie jedoch eine für ko.observable.fn definieren, ist diese nur für Observable (und beobachtbare Arrays) verfügbar ) nicht auf berechneten, trotz der Tatsache, dass ko.isObservable(computed) wahr zurückgibt.

    
Retsam 28.04.2015, 15:12
quelle

Tags und Links