【问题标题】:Polymer Ajax Binding from routing parameter not working来自路由参数的 Polymer Ajax 绑定不起作用
【发布时间】:2017-10-10 15:37:16
【问题描述】:

我正在使用 iron-pages 和 app-router 将我发送到一个新页面,我需要一个 iron-ajax 元素来发送带有从路由器发送的参数的请求。

但是,当我尝试在 Iron ajax 中添加我的参数 {{parameter.identifier}} 时,它不起作用。

我怀疑这与本地路由参数有关,而 iron-ajax 看不到它? 我试图为参数添加一个属性和一个 getter 函数,但似乎没有任何工作......

此外,我知道 ajax 是正确的,因为如果我将绑定变量 {{parameter.identifier}} 更改为数据库中存在的值,它就可以查询。

<dom-module id="cst-data">
    <template>
        <style> 

    </style>

    <triplat-route name="dataRoute" params="{{parameters}}"></triplat-route>

    <iron-ajax
    id="getData"
    auto
    url="http:/.../oslc/os/OSLCPERSON?"
    params='{"oslc.where":"dcterms:identifier={{parameters.identifier}}"
            }'  

    headers='{"Content-Type": "application/json;charset=utf-8"'     
    handle-as="json"
    on-response="handleResponse"
    ></iron-ajax>
            <paper-card>{{parameters.identifier}}</paper-card>
            <paper-card>{{dataRes.name}}</paper-card>
</template>
</dom-module>
<script>
    Polymer({

        is: "cst-data" ,
        handleResponse: function () {
            this.dataRes = this.$.getData.lastResponse['rdfs:member'];
            }

    });
</script>

【问题讨论】:

  • 你能显示更多代码吗?您可以混淆敏感数据和网址。
  • 感谢您的回答,为了清楚起见,我已经添加了其余代码。
  • 它在 {{parameters.identifier}} 中填写了什么?它是未定义的吗?如果你想调试这个,你可以简单地在= 之前添加$ 符号。所以:params$='{"oslc.where":"dcterms:identifier={{parameters.identifier}}" }' 。您将能够在浏览器中的开发人员工具中看到,实际结果是什么。还有一个问题,当您执行console.log(this.parameters) 时,输出是什么?

标签: javascript ajax polymer url-routing iron-ajax


【解决方案1】:

我找到了解决办法,

我发现 Iron-ajax 中的参数无法真正处理动态输入,所以最终我使用 getter 函数来处理它。 然后出现了另一个问题,即 getter 返回是输入字符而不是字符串到查询中,首先添加一个新的临时字符串并返回我能够修复它的字符串。

    <triplat-route id="maximoDataRoute" name="maximo-data" params="{{parameter}}"></triplat-route>

<iron-ajax
    id="ajax"
    url="http://.../"
    headers='{"Content-Type": "application/json;charset=utf-8"'     
    handle-as="json"
    params$='{{_getParams(parameter)}}'
    on-response="handleResponse"
    auto></iron-ajax>

<script>

    Polymer({

        is: "cst-employee-maximo-data" ,
        properties: {
            res: Object,
            tempString: String,
            parameter :{
                type: Object,
                notify: true
            },
        },
        handleResponse: function (event) {
            console.log("Entering handleResponse")
            this.res = event.detail.response['member'];
            console.log(this.res)   
        },

       _getParams: function(parameter) {
        this.tempString = '{"oslc.where":"dcterms:identifier='+ this.parameter.identifier+'","oslc.select":"*"}'
        console.log("tempString: "+this.tempString)
        return this.tempString   
       }

   });
</script>

我注意到的另一个有趣的事情是,在函数_getParameters中,我必须输入一个参数,我输入什么并不重要,但如果它没有它,“parameter.identifier”是无法识别的,如果有人能解释一下,不胜感激!

【讨论】:

    【解决方案2】:

    你这样做的方式是正确的。函数_getParams 返回整个查询字符串是正常的。

    _getParams 函数中,您不需要使用this.parameter.identifier,而只需使用parameter.identifier,因为您将identifier 作为绑定{{_getParams(parameter)}} 的参数传递给该函数。这是一个很好的方法,因为每当this.parameter 发生变化时,函数_getParams 就会被自动调用。否则,您将无法再将params 更改为iron-ajax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多