Knockout:自定义绑定处理程序上的valueAccessor vs viewModel?

nev*_*fox 6 knockout.js

通过绑定属性(通过valueAccessor)访问视图模型的值并从传递给处理程序的init和update的viewModel参数中获取它们之间的区别是什么?我一直认为答案是那些链接到valueAccessor的模型属性会自动设置绑定(这会触发对可观察对象的任何更改的更新),但我不确定.

RP *_*yer 10

valueAccessor参数使您可以专门访问传递给绑定的内容,而viewModel参数使您可以访问范围内的整个数据对象.

所以,如果有人说 text: firstName

valueAccessor()会给你firstNameobservable/property,并viewModel允许你访问包含的对象firstName.

  • `valueAccessor`没有做任何特别的事情.任何访问其值的observable都将创建依赖项.用例实际上就是说你的视图模型上有`firstName`和`lastName` observables.在绑定中你会做`text:firstName`.在绑定处理程序中,您将使用`valueAccessor`来了解您要对其执行的特定observable /属性(`firstName`而不是`lastName`或任何其他属性).因此,虽然`viewModel` arg包含所有数据,但您仍需要知道具体传递给绑定的内容. (3认同)