Quindi un oggetto abbonabile è un oggetto a eliminazione diretta, diverso da osservabili o calcoli, ma ereditato da entrambi i parametri osservabili e i calcoli. Un abbonabile è tutto ciò che può essere sottoscritto; tutto ciò che può emettere eventi che altre parti del codice possono ascoltare. È da dove viene derivata la funzionalità observable.subscribe(function() {})
.
Un osservabile, d'altra parte, è un tipo specifico di abbonabile: è un abbonabile che contiene un valore e che emette il nuovo valore per i suoi abbonati ogni volta che tale valore cambia. La parte "ha un valore corrente" dell'osservabile non è una parte inerente dell'essere una "sottoscrivibile", solo la parte "emette eventi per i suoi abbonati" è.
non è usato molto, ma si può costruire subscribables direttamente, e passerà il test ko.isSubscribable
ma sicuro il test ko.isObservable
, quindi la differenza tra questi due metodi.
Anche se personalmente non l'ho visto fare in pratica, this blog post fornisce un esempio di come è possibile utilizzare o estendere la funzionalità ko.subscribable
, creando un'interfaccia Pub/Sub in aggiunta agli abbonati.
La relazione è illustrata da questa tabella dal numero knockout documentation on custom functions.
noti, tuttavia, che la tabella di cui sopra è un po 'ingannevole su un punto: ko.computed
provenga effettivamente dalle ko.observable
non dal ko.subscribable
direttamente. Quindi perché ko.isObservable(computed)
restituisce true. Tuttavia, la relazione indicata dal grafico è la relazione utilizzata per l'ereditazione di funzioni personalizzate aggiunte agli oggetti knockout. (Che ha senso, dato che era l'argomento della pagina della documentazione in cui è stato trovato)
Quindi se si definisce una funzione personalizzata su ko.subscribable.fn
, allora sarà disponibile sia su calcolati che su osservabili ... ma se ne definite uno su ko.observable.fn
sarà disponibile solo su osservabili (e matrici osservabili) non su computer, nonostante il fatto che ko.isObservable(computed)
restituisca true.
isSubscribable non è incorporato, fa parte di un pub/sub plug-in – Anders
No, 'ko.isSubscribable' fa sicuramente parte di KO. – Retsam