数据绑定到Polymer中的动态路径

时间:2017-05-19 19:02:00

标签: javascript data-binding javascript-objects polymer-1.0 polymerfire

我正在使用Polymer 1.0和Firebase构建一个Web应用程序,我希望在将数据输入到路径中具有用户ID的路​​径时更改视图。要做到这一点,我想做这样的事情:

[[question.answers.(user.uid).choice]]

让我更详细地解释一下。所以,在模板中,我有类似的东西:

 <ul id="question-list">
    <template is="dom-repeat" items="[[questions]]" sort="_computeSort" as="question">
      <li class="card question" data-key="[[question.$key]]" question="[[question]]">
        <h3 class="content">[[question.question]]</h3>
        <p hidden$="[[ MY DATA BINDING HERE ]]">[[question.afterMessage]]</p>
      </li>
    </template>
  </ul>

如果查看上面的<p>元素,hidden属性中的内容就是我希望数据绑定发生的地方。 questions路径的结构如下:

questions data structure

所以questions是一组问题,每个问题都有一个属性afterMessage,我想在回答问题后向用户展示。

为了检查用户是否回答了问题,我在answers路径中有一个名为questions的路径。在answers路径中,我将用户的密钥作为用户选择的密钥。

因此,如果用户密钥为ZjHDMDa270Uyp6sAL02Mam2ftGf2的用户登录到我的应用程序,则该用户答案的​​数据绑定路径为:

[[quesion.answers.ZjHDMDa270Uyp6sAL02Mam2ftGf2.choice]]

现在上面这个表达式是我想要绑定的,但当然用户ID会因用户而异,所以我该怎么办呢?换句话说,我想做这样的事情:

[[question.answers.(user.uid).choice]]

1 个答案:

答案 0 :(得分:1)

聚合物数据绑定不支持嵌套或表达式。你可能不得不像这样使用computed binding

// template's computed binding
[[_getChoice(question, user.uid)]]

// script
Polymer({
  _getChoice: function(question, uid) {
    return question.answers[uid].choice;
  },
  ...
});