Polymer是否允许数据绑定使用不同的标识定义?

Polymer是否允许数据绑定使用不同的标识定义?,polymer,Polymer,根据Polymer数据绑定文档中的定义,似乎JavaScript等式用于确定模板调用之间的数据是否“相同”。因此,值类型具有值相等性,但对象和数组使用引用相等性。如果我对返回对象数组的服务进行了两次调用,并且其中一些对象在调用之间具有相同的值,则将重新创建模板实例,因为数组和对象都反序列化到不同的实例中(我已在版本0.3.3中验证了此行为) 是否可以指定一个类似于how的标识函数 我不知道是否有这样的事情,但我会想出一个不同的解决方案。让我们假设您的代码看起来像这样(伪代码) 你好{{user

根据Polymer数据绑定文档中的定义,似乎JavaScript等式用于确定模板调用之间的数据是否“相同”。因此,值类型具有值相等性,但对象和数组使用引用相等性。如果我对返回对象数组的服务进行了两次调用,并且其中一些对象在调用之间具有相同的值,则将重新创建模板实例,因为数组和对象都反序列化到不同的实例中(我已在版本0.3.3中验证了此行为)


是否可以指定一个类似于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>