gpt4 book ai didi

dart - 我如何@observe 不实现 observe.Observable 的对象在聚合物中

转载 作者:行者123 更新时间:2023-12-01 05:09:46 35 4
gpt4 key购买 nike

我使用 protobuffers 在我的前端和我的 Dart 服务器之间进行通信。
那些对象没有实现 Observable .

我的 Dart 聚合物对象看起来像:

@CustomTag('user-address')
class UserAddress extends PolymerElement {

@observable
protobuffer.Address address = new protobuffer.Address();

我的 html 代码看起来像:
<template>
<form method="post" on-submit="{{doSubmit}}">
<input type="text" value="{{ address.street }}" name="street">
Your street is {{ address.street }}.

因为 protobuffer.Address未实现 Observable {{ address.street }}不会更新。

我找到了一些可能的解决方案/解决方法,但我对其中任何一个都不满意:
  • fork protobuffer 创建代码 [1] 并将输出调整为 mixin ChangeNotifier .
    我已经实现了这一点,但我很确定我的更改不会被上游接受。
  • 将 protobuffer 对象转换为 ObservableMap s。这不需要对上游进行任何更改,但是我们失去了类型安全性并且必须从 protobuffer → map 转换,然后从 map → protobuffer 转换。
  • 尝试使用 Mock对象,并拦截 setter 调用。我还没有花足够的时间来确定这是否可能。

  • [1] 那些 protobuffer 对象由 protobuf-builder 自动生成它使用 dart-protoc-plugin .

    最佳答案

    我知道这可能不是您正在寻找的答案,但我真的建议您将数据传输对象类(通过网络发送的对象类)与 View 对象类(支持数据绑定(bind)的对象类)分开。

    在进行了大量 MVVM 模式开发后,我发现这始终是一个好主意,值得重复它所创建的内容。强制单个类同时充当 View 对象(数据绑定(bind)到它)和数据传输对象(使用例如 protofuf 传输它)通常只会带来很多麻烦,尤其是随着应用程序的增长, View 变得更复杂,您想在屏幕上显示的内容将不再与您要传输的内容 1:1 映射。

    使用单独的类来支持数据绑定(bind)将使您的绑定(bind)表达式更加简单。因为您可以在 View 对象上自由创建属性而无需考虑数据传输,所以您的所有绑定(bind)表达式将始终与属性 1:1 保持一致,这使得数据绑定(bind)故障排除变得更加简单。

    关于dart - 我如何@observe 不实现 observe.Observable 的对象在聚合物中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25868749/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com