【问题标题】:Knockout: valueAccessor vs viewModel on custom binding handlers?淘汰赛:自定义绑定处理程序上的 valueAccessor 与 viewModel?
【发布时间】:2013-07-04 19:15:14
【问题描述】:

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

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    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 参数包含所有数据,但您仍然需要知道具体传递给绑定的内容。
    • 这是有道理的。谢谢你。它基本上等同于在也接受上下文参数的方法上具有显式参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多