Ответ 1
Если единственная цель вашего вычисленного наблюдаемого - сделать простую привязку к нему, то использование функции будет эквивалентным. Привязки реализуются внутри вычисленного наблюдаемого для отслеживания зависимостей, поэтому он будет перезапускать вашу привязку, когда изменяется какое-либо из наблюдаемых.
Вот несколько вещей, которые следует учитывать в отношении вычисляемых наблюдаемых по сравнению с функцией
-
значение вычисленного наблюдаемого кэшируется, поэтому оно обновляется только после его создания и при обновлении зависимостей. Для регулярной функции вам нужно будет выполнять логику каждый раз. Если многие вещи зависят от этого значения (скажем, каждый элемент в коллекции привязывается к значению от родителя), тогда эта логика будет запускаться снова и снова.
-
в вашем JavaScript, вы также можете использовать вычисляемые наблюдаемые данные, как и другие наблюдаемые. Это означает, что вы можете создавать ручные подписки на них и зависеть от них от других вычислений (вызов функции также создавал бы эту зависимость). Вы можете полагаться на обычные методы утилиты в KO, например
ko.utils.unwrapObservable
, чтобы в общем случае определить, нужно ли вам называть это как функцию или не извлекать значение. -
если в конечном итоге вы хотите отправить значение на сервер, вычисленный наблюдаемый будет естественно появляться на вашем выходе JSON, а значение, являющееся результатом нормальной функции, просто исчезнет при преобразовании в JSON (вы должны сделать больше работы, чтобы сначала заполнить свойство из этой функции).