Я написал несколько пользовательских привязок с помощью KnockoutJS. Я все еще не уверен, когда использовать. ko.utils.unwrapObservable(item)
Глядя на код, этот вызов в основном проверяет, item
является ли наблюдаемым. Если это так, верните значение (), если нет, просто верните значение. Если посмотреть на раздел Knockout о создании пользовательских привязок, у них следующий синтаксис:
var value = valueAccessor(), allBindings = allBindingsAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
В этом случае они вызывают наблюдаемое переходное отверстие, ()
но затем также вызывают ko.utils.unwrapObservable
. Я просто пытаюсь понять, когда использовать одно по сравнению с другим, или я должен всегда следовать приведенному выше шаблону и использовать оба.
ko.toJS(yourObject)
, чем использоватьko.utils.unwrapObservable
, если вы пытаетесь получить развернутую версию объекта для передачи в виджет или стороннюю библиотеку. В общем, безопаснее всего использоватьko.utils.unwrapObservable
для поддержки наблюдаемых и ненаблюдаемых.ko.utils.unwrapObservable
. Глядя на код, он просто проверяет, является ли он наблюдаемым, и если это так, Knockout вызывает,()
чтобы получить значение наблюдаемого, в противном случае он просто возвращает значение для ненаблюдаемого. Если меня интересует только значение данных, переданных в привязку, почему я не могу просто всегда использовать()
?myBinding
и кто - то связывает , т.е. какdata-bind="myBinding: myValue"
.myValue
может быть наблюдаемым или простым свойством в модели представления. Если это просто свойство, и я называю его функцией, вы получите сообщение об ошибке.ko.utils.unwrapObservable
безопасно вернет вам значение независимо от того, было ли вам передано наблюдаемое или нет.ko.unwrap
доступно в версии 3.0+ . Если вы используете более раннюю версию, чем 3.0, тоko.utils.unwrapObservable
все еще есть.Предыдущий ответ верен, но часто я передаю функции пользовательским привязкам (функция, которая проверяет разрешения или определяет, что делать на основе чего-то еще, и т. Д.). Что мне действительно нужно, так это развернуть любую функцию, даже если она не является наблюдаемой.
Следующее рекурсивно разворачивает ВСЕ:
Вот пример простой пользовательской привязки, которую я написал:
Таким образом, bindingValue всегда содержит значение. Мне не нужно беспокоиться о том, передал ли я функцию, наблюдаемый объект, значение или даже функцию внутри наблюдаемого. Это будет правильно разворачивать все, пока не доберется до нужного мне объекта.
Надеюсь, это кому-то поможет.
источник