【问题标题】:Blazor: Binding OnChange events - okay to use EventCallback.Factory.CreateBinder?Blazor:绑定 OnChange 事件 - 可以使用 EventCallback.Factory.CreateBinder 吗?
【发布时间】:2020-09-16 21:32:05
【问题描述】:

我是 Blazor 的新手,在设计组件时遇到了一个使用我不熟悉的绑定方法的示例。

他们使用 EventCallback.Factory.CreateBinder() 而不是relevant Microsoft documements detailing how to bind data.中显示的绑定技术

这是他们完成绑定的方式:

@onchange="EventCallback.Factory.CreateBinder<string>(
               this,
               value => CurrentValueAsString = value,
               CurrentValueAsString,
               null)"

但我过去看到的方式涉及一个具有特定名称的方法,如“ValueChanged”作为事件回调来处理绑定。 As shown here.

使用 EventCallback.Factory.CreateBinder() 方法而不是 Microsoft 文档中概述的方法有什么缺点吗?

当我搜索 CreateBinder() 方法时,我看到它被标记为“仅供内部使用”。这是否意味着我不应该使用它? Shown as "internal use only" here.

【问题讨论】:

    标签: events data-binding blazor 2-way-object-databinding


    【解决方案1】:
    @onchange="EventCallback.Factory.CreateBinder<string>(
               this,
               value => CurrentValueAsString = value,
               CurrentValueAsString,
               null)"
    

    这太熟练了...但有时可能比提供方法名称更好。上面@onchange 指令属性的值与编译器在BuildRenderTree 方法中生成的值非常相似。

    但我过去看到的方式涉及一个具有特定名称的方法,如“ValueChanged”作为事件回调来处理绑定。如图所示。

    在这里,您指的是父级与其子级之间的组件绑定。但是,上面带有@onchange指令属性的代码sn-p与元素数据绑定有关......实际上它们基于相同的原理。 如果将子组件绑定到其父组件的 MyValue 属性,如下所示:

    以及子组件中的以下内容:

    [Parameter]
    Public string Value {get;set;}
    [Parameter]
    Public EventCallback<string> ValueChanged {get;set;}
    

    然后编译器将创建执行绑定的代码(双向数据绑定)。如果您查看该文件,您会注意到编译器生成的代码与用于元素数据绑定的代码几乎相同。

    使用 EventCallback.Factory.CreateBinder() 方法而不是 Microsoft 文档中概述的方法有什么缺点吗?

    我不这么认为......

    当我搜索 CreateBinder() 方法时,我看到它被标记为“仅供内部使用”。这是否意味着我不应该使用它?

    我们不应该做很多事情......

    您应该通过模仿来学习...我已经看到 Blazor 团队的人在 github 的问题中的 cmets 中使用 CreateBinder...不是世界末日。这取决于你...

    【讨论】:

    • 很公平!这对我来说是一个足够好的答案。谢谢。
    猜你喜欢
    • 2020-05-30
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2019-08-16
    • 2020-05-16
    相关资源
    最近更新 更多