Polymer是否允许数据绑定使用不同的标识定义?
根据Polymer数据绑定文档中的定义,似乎JavaScript等式用于确定模板调用之间的数据是否“相同”。因此,值类型具有值相等性,但对象和数组使用引用相等性。如果我对返回对象数组的服务进行了两次调用,并且其中一些对象在调用之间具有相同的值,则将重新创建模板实例,因为数组和对象都反序列化到不同的实例中(我已在版本0.3.3中验证了此行为)Polymer是否允许数据绑定使用不同的标识定义?,polymer,Polymer,根据Polymer数据绑定文档中的定义,似乎JavaScript等式用于确定模板调用之间的数据是否“相同”。因此,值类型具有值相等性,但对象和数组使用引用相等性。如果我对返回对象数组的服务进行了两次调用,并且其中一些对象在调用之间具有相同的值,则将重新创建模板实例,因为数组和对象都反序列化到不同的实例中(我已在版本0.3.3中验证了此行为) 是否可以指定一个类似于how的标识函数 我不知道是否有这样的事情,但我会想出一个不同的解决方案。让我们假设您的代码看起来像这样(伪代码) 你好{{user
是否可以指定一个类似于how的标识函数 我不知道是否有这样的事情,但我会想出一个不同的解决方案。让我们假设您的代码看起来像这样(伪代码)
你好{{user.name}
如果我没说错的话,你说,当提出请求时,模板会得到重新评估,不管数据是否有变化
为了解决这个问题,我们可以用一种不同的方式表示数据,这种方式不是通过引用而是通过值进行计算
class UserListElement extends PolymerElement {
@observable List userIds = toObservable([]);
Map<int, Object> users = {};
onResponse(var response) {
users = {};
for(var user in response) {
users[user.id] = user;
if (!users.contains(user.id)) userIds.add(user.id);
}
var toRemove = userIds.where((user) => !_userData.containsKey(user.id));
for(var userId in toRemove) userIds.remove(userId);
}
}
类UserListElement扩展了聚合关系{
@可观察列表userid=toObservable([]);
映射用户={};
onResponse(var响应){
用户={};
for(响应中的var用户){
用户[user.id]=用户;
如果(!users.contains(user.id))userIds.add(user.id);
}
var toRemove=userid.where((user)=>!\u userData.containsKey(user.id));
for(toRemove中的var userId)userId.remove(userId);
}
}
-
你好,来自{{用户[userId].name}
正如我所说的,未经测试的伪代码。但这是我唯一能想到的主意
class UserListElement extends PolymerElement {
@observable List userIds = toObservable([]);
Map<int, Object> users = {};
onResponse(var response) {
users = {};
for(var user in response) {
users[user.id] = user;
if (!users.contains(user.id)) userIds.add(user.id);
}
var toRemove = userIds.where((user) => !_userData.containsKey(user.id));
for(var userId in toRemove) userIds.remove(userId);
}
}
<ajax onResponse="{{onResponse}}" url="/users"></ajax>
<template repeat="{{userId in users}}">
<span>Hello from {{users[userId].name}}</span>
</template>