首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >web应用程序中可观察对象的redstone_mapper错误解码()

web应用程序中可观察对象的redstone_mapper错误解码()
EN

Stack Overflow用户
提问于 2015-06-15 21:31:15
回答 1查看 114关注 0票数 2

对于在控制台和web应用程序中具有可观察字段的对象,使用redstone.dart中的decode()有不同的结果。

我的控制台应用程序有pubspec.yaml

代码语言:javascript
复制
name: 'redstone_decode'
version: 0.0.1
description: console app
environment:
  sdk: '>=1.0.0 <2.0.0'
dependencies:
  redstone: any
  redstone_mapper: any
  observe: any
transformers:
- redstone_mapper # http://redstonedart.org/doc/redstone_mapper.html
- observe:
    entry_points: bin/main.dart

main.dart

代码语言:javascript
复制
import 'dart:convert' show JSON;
import 'package:redstone_mapper/mapper.dart';
import 'package:redstone_mapper/mapper_factory.dart';
import 'package:observe/observe.dart';

class User extends Object with Observable {
  @Field()
    @observable
      String username;
  @observable
    @Field()
      String password;
}

void main() {
  bootstrapMapper();
  User user = new User()
    ..username = "user"
    ..password = "pass";
  String userJson = JSON.encode(encode(user));
  User user1 = decode({
    "username":"user",
    "password":"pass",
    "ERROR":"error"}, User);
  String userJson1 = JSON.encode(encode(user1));
  print(' after decode() '+ userJson1);
}

而且效果很好。控制台的结果是:

代码语言:javascript
复制
after decode() {"username":"user","password":"pass"}

我用模板制作了网络应用程序,“一个绝对赤裸裸的网络应用程序”。它有pubspec.yaml

代码语言:javascript
复制
name: 'redstone_decode'
version: 0.0.1
description: An absolute bare-bones web app.
environment:
  sdk: '>=1.0.0 <2.0.0'
dependencies:
  browser: '>=0.10.0 <0.11.0'
  redstone: any
  redstone_mapper: any
  observe: any
transformers:
#- redstone_mapper http://redstonedart.org/doc/redstone_mapper.html
- observe:
    entry_points: web/index.html
    entry_points: web/main.dart

main.dart

代码语言:javascript
复制
import "dart:html";
import 'dart:convert' show JSON;
import 'package:redstone_mapper/mapper.dart';
import 'package:redstone_mapper/mapper_factory.dart';
import 'package:observe/observe.dart';

class User extends Object with Observable {
  @Field()
    @observable
      String username;
  @observable
    @Field()
  String password;
}

void main() {
  bootstrapMapper();
  User user = new User()
    ..username = "user"
    ..password = "pass";
  String userJson = JSON.encode(encode(user));
  User user1 = decode({
    "username":"user",
    "password":"pass",
    "ERROR":"error"}, User);
  String userJson1 = JSON.encode(encode(user1));
  querySelector('#output').text = ' after decode() '+ userJson1;
}

达蒂姆

代码语言:javascript
复制
after decode() {}

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-28 10:26:31

观察变压器将将字段名重命名为__$FieldName,简单的字段成员将成为setter/getter。只有getter保留了@Field()注释.,所以decode函数将失败。

解决方法,创建基类以保留原始字段名:

代码语言:javascript
复制
import 'package:redstone_mapper/mapper.dart';
import 'package:redstone_mapper/mapper_factory.dart';
import 'package:observe/observe.dart';

class BaseUser {
  @Field()
  String username;
  @Field()
  String password;
}

class User extends BaseUser implements Observable {
  @Field()
  @observable
  String username;
  @Field()
  @observable
  String password;
  toString() => 'User("$username", "$password");';
}

void main() {
  bootstrapMapper();
  User user = new User()
    ..username = "user"
    ..password = "pass";
  String userJson = encodeJson(user);
  print('$userJson');

  User userDes1 = decodeJson('{"username":"user","password":"pass"}', User);
  User userDes2 = decode({"username":"user","password":"pass"}, User);

  print(userDes1); // User("user", "pass");
  print(userDes2); // User("user", "pass");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30855297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档