javascript - polymer - 在元素中加载核心 ajax

标签 javascript html polymer

检查后core-ajax usage在 polymer 网站中,我决定在我的元素/小部件中使用 core-ajax 添加 ajax 功能。

test-view.html

<link rel="import" href="bower_components/polymer/polymer.html">
<link rel="import" href="bower_components/core-ajax/core-ajax.html">

<polymer-element name="test-view" attributes="url">
    <core-ajax id="elemAjax" url="{{url}}" handleAs="json"></core-ajax>
    <template>
        <div id="body"></div>
    </template>
    <script>
        Polymer('test-view', {
        ready: function() {
            var ajax = this.$.elemAjax; // this line
            ajax.addEventListener('core-response', function() {
                console.log(this.response);
            });
        }
    });
    </script>
</polymer-element>

不幸的是,我的脚本中的“ajax”变量返回“undefined”。如何使用 core-ajax 在元素中加载 ajax?

附带问题: polymer 元素内的“id”属性是否只能在 polymer 元素内访问?

最佳答案

三个主要问题:

  1. core-ajax 必须放在模板内部,因此它是每个实例 DOM 的一部分(这就是 ajax 未定义的原因)。
  2. 您需要 core-ajax 上的 auto 属性(否则,您必须调用 上的 go() 方法core-ajax 发送请求)。
  3. 您的事件处理程序使用 this 但未绑定(bind)到元素范围。建议您使用事件委托(delegate)代替 addEventListener

请参阅下面的新示例。我所做的其他(不太重要的)调整:

  1. core-ajax 中移除 id,我们不再需要引用它。
  2. 删除 polymer.html 导入,core-ajax 已经导入它。
  3. 移除 Polymer()test-view 参数,在导入中定义元素时不需要。

修改示例:

<link rel="import" href="bower_components/core-ajax/core-ajax.html">

<polymer-element name="test-view" attributes="url">
<template>
    <core-ajax auto url="{{url}}" handleAs="json" on-core-response="{{ajaxResponse}}"></core-ajax>
    <div id="body"></div>
</template>
<script>
    Polymer({
        ajaxResponse: function(event, response) {
            console.log(response);
        }
    });
</script>
</polymer-element>

更好的方法是完全避免事件并将数据直接绑定(bind)到响应数据。示例:

<link rel="import" href="bower_components/core-ajax/core-ajax.html">

<polymer-element name="test-view" attributes="url">
<template>
    <core-ajax auto url="{{url}}" handleAs="json" response="{{response}}"></core-ajax>
    <div id="body"></div>
</template>
<script>
    Polymer({
        responseChanged: function(oldValue) {
            console.log(this.response);
        }
    });
</script>
</polymer-element>

关于javascript - polymer - 在元素中加载核心 ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24359417/

相关文章:

django - polymer-cookie 生成重复的 Django csrf cookie

java - 在 Android 的 Web View 中没有出现警报?

html - 如何将 DIV 并排放置

javascript - slideUp() slideDown() 不能正常工作

javascript - 更改具有相同功能的多个切换按钮标签之一 - polymer

javascript - 访问嵌套的 polymer 元素

javascript - 如何在多个复选框中设置默认选中 - AngularJS

javascript - 有没有办法更优化地编写此代码 - 所以我只遍历数组一次

javascript - 在两个字段上自动完成 ajax

html - 使用 css 或 SVG 制作圆形或螺旋渐变的最佳方法是什么?