在同一元素内的节点的侦听器回调内访问元素的方法

时间:2017-04-03 14:10:01

标签: javascript jquery html jquery-selectors polymer

我在一个节点的回调中访问dom中的方法时遇到问题,我已经附加了一个点击监听器,我无法找出原因。我尝试了以下几点。

这是负责访问回调内部方法的代码:

<dom-module id="my-view2">
  <template>

  ...html codes ... 

  </template> 

  <script> 
  Polymer({
    is: 'my-view2',

    ... properties, etc ...


 //******* trying to access a method *******************
   handleClick: function(e) {
     var btn = document.createElement("paper-button");
     btn.addEventListener("click", function() {
     var el = Polymer.dom(this).querySelector('#my-view2'); 
     el.methodToAccess();
   });
   }

  methodToAccess: function() {
    console.log('success'); 
  },

 }); 

我尝试了所有这些:

this.$$('#my-view2")
document.querySelector("#my-view2"); 
Polymer.dom(this.root).querySelector('#my-view2');
Polymer.dom(this).querySelector('#my-view2');
this.getElementById('my-view2'); 

它们都不起作用而且都导致无法读取属性&#39; methodToAccess&#39;为null。我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果您将回调函数绑定到当前import $ from 'jquery' export function queryBehance(query) { var term = query.replace(/\s/, "+"); var url = "https://www.behance.net/v2/projects? client_id={client_id}&field=" + term; return $.ajax({ url: url, type: "get", data: {projects: {}}, dataType: "jsonp", }).done((response) => { console.log(response); return response["projects"] }).fail(() => { console.log("Ajax request fails") }) }; 范围,则可以直接访问this

methodToAccess

话虽如此,您可能希望使用imperative add/remove listeners

以聚合方式进行
handleClick: function(e) {
 var btn = document.createElement("paper-button");
 btn.addEventListener("click", function() {
   this.methodToAccess();
 }.bind(this));
}

HTH