从js中获取数据不对
获取的是空的map, js 端用 plugin 传过来是有 map。
但是 https://github.com/wuba/Fair/blob/4b192672bf5513574dd8b36bae1e96bb075fa055/fair/lib/src/internal/bind_data.dart#L90 这个地方返回的是 空map
@FairPatch()
class SugarDemo extends StatefulWidget {
const SugarDemo({
super.key,
required this.fairProps,
});
final Map<String, dynamic> fairProps;
@override
State<SugarDemo> createState() => _SugarDemoState();
}
class _SugarDemoState extends State<SugarDemo> {
@FairProps()
var fairProps;
final String _pageName = '#FairKey#';
var _list = [];
@override
void initState() {
super.initState();
fairProps = widget.fairProps;
onLoad();
}
void onLoad() {
_list.add({'ddd': 1});
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('test'),
),
body: Column(
children: Sugar.map<Widget, dynamic>(_list, builder: (item) {
return Text('$item');
}),
),
);
}
}
class 中的build 方法一般都是布局相关,dart2js在编译过程中把这个方法默认排除了。所以样例中的build 方法其实并没有参与编译。
_list.add({'ddd': 1}); 是执行了的。。问题是获取的值是空 map
@FairPatch()
class SugarDemo extends StatefulWidget {
const SugarDemo({
super.key,
required this.fairProps,
});
final Map<String, dynamic> fairProps;
@override
State<SugarDemo> createState() => _SugarDemoState();
}
class _SugarDemoState extends State<SugarDemo> {
@FairProps()
var fairProps;
final String _pageName = '#FairKey#';
@override
void initState() {
super.initState();
fairProps = widget.fairProps;
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('test'),
),
body: Text('$fairProps')
);
}
}
更简单的例子,从外部传进来的参数 fairProps,直接显示也是空 map
你怎么传的,生成的js是怎么样的要贴出来看看
你怎么传的,生成的js是怎么样的要贴出来看看
最简单的 map {"xx":1}
GLOBAL["#FairKey#"] = (function (__initProps__) {
const __global__ = this;
return runCallback(function (__mod__) {
with (__mod__.imports) {
function _SugarDemoState() {
const inner = _SugarDemoState.__inner__;
if (this == __global__) {
return new _SugarDemoState({ __args__: arguments });
} else {
const args =
arguments.length > 0 ? arguments[0].__args__ || arguments : [];
inner.apply(this, args);
_SugarDemoState.prototype.ctor.apply(this, args);
return this;
}
}
_SugarDemoState.__inner__ = function inner() {
this.fairProps = __initProps__;
this._pageName = "#FairKey#";
};
_SugarDemoState.prototype = {
initState: function initState() {
const __thiz__ = this;
with (__thiz__) {
fairProps = widget.fairProps;
}
},
};
_SugarDemoState.prototype.ctor = function () {};
return _SugarDemoState();
}
}, []);
})(convertObjectLiteralToSetOrMap(JSON.parse("#FairProps#")));
参数: { 'fairProps': jsonEncode({ 'title': 'Fair Page', }) }
读取: String getTitle() { return fairProps['title']; }
你再发一下你的生成的json看看
不是读取。读取对的。。而且是 获取整个 map
{
"className": "Scaffold",
"na": {
"appBar": {
"className": "AppBar",
"na": {
"title": {
"className": "Text",
"pa": [
"test"
]
}
}
},
"body": {
"className": "Text",
"pa": [
"#($fairProps)"
]
}
},
"methodMap": {}
}
不是读取。读取对的。。而且是 获取整个 map
我debug了一下,应该是解析类型变了。
lib/src/render/expression.dart
不同的写法,可能走的Expression不同。
确实不能像你那样直接获取整个fairProps。
不是读取。读取对的。。而且是 获取整个 map
个人觉得,UI和数据逻辑最好分开,数据逻辑都用js部分实现,通过方法。
第一个列子里面,也是。那种也不支持。 网络请求之后。自己增加一些对象,不是很正常的操作吗
第一个列子里面,也是。那种也不支持。 网络请求之后。自己增加一些对象,不是很正常的操作吗
一样的,你的item是个Map,你需要创建一个对象通过属性去读取(item.ddd),里面的值。
Fair有demo的,你可以去找找。
第一个列子里面,也是。那种也不支持。 网络请求之后。自己增加一些对象,不是很正常的操作吗
一样的,你的item是个Map,你需要创建一个对象通过属性去读取(item.ddd),里面的值。
Fair有demo的,你可以去找找。
你说的都知道,数组对象不能直接传递到 dart 这边,体验很差呢
第一个列子里面,也是。那种也不支持。 网络请求之后。自己增加一些对象,不是很正常的操作吗
一样的,你的item是个Map,你需要创建一个对象通过属性去读取(item.ddd),里面的值。 Fair有demo的,你可以去找找。
你说的都知道,数组对象不能直接传递到 dart 这边,体验很差呢
哈哈哈哈,又不是完全的动态化。Fair就是UI和逻辑的动态化是分开,不能在UI中执行逻辑代码,没办法的。DSL+JS。 除非像北海那样。
我在开发中也觉得很烦,开发成本还是比较大的,数据转来转去很烦。我现在有什么问题和不爽,都自己去改,不用官方的分支