【发布时间】:2013-07-04 19:15:14
【问题描述】:
通过绑定属性(通过 valueAccessor)访问视图模型的值与从传递给处理程序的 init 和更新的 viewModel 参数获取它们之间有什么区别?我一直认为答案是那些链接到 valueAccessor 的模型属性会自动设置绑定(这会触发对可观察对象的任何更改的更新),但我不确定。
【问题讨论】:
标签: knockout.js
通过绑定属性(通过 valueAccessor)访问视图模型的值与从传递给处理程序的 init 和更新的 viewModel 参数获取它们之间有什么区别?我一直认为答案是那些链接到 valueAccessor 的模型属性会自动设置绑定(这会触发对可观察对象的任何更改的更新),但我不确定。
【问题讨论】:
标签: knockout.js
valueAccessor 参数让您可以访问具体传递给绑定的内容,而viewModel 参数让您可以访问范围内的整个数据对象。
所以,如果有人说text: firstName
valueAccessor() 会给你firstName observable/property,viewModel 会让你访问包含firstName 的对象。
【讨论】:
viewModel,因为它包含valueAccessor() 所做的一切以及更多。我最初的猜测是,我没有测试过或无法在文档中明确确认,你传递给valueAccessor() 的内容会自动设置一个绑定,这会产生明确的需求。也许不是在所有情况下,一个都是另一个的超集?你能举一个 valueAccessor() 是唯一可行选择的例子吗?
valueAccessor 没有做任何特别的事情。任何可以访问其值的 observable 都将创建一个依赖项。用例实际上是说您的视图模型上有firstName 和lastName observables。在绑定中你会做text: firstName。在您的绑定处理程序中,您将使用 valueAccessor 来了解您想要操作的特定可观察/属性(firstName 而不是 lastName 或任何其他属性)。因此,虽然 viewModel 参数包含所有数据,但您仍然需要知道具体传递给绑定的内容。