Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t使用主干网和jQuery移动和发送方数据动态绑定Click处理程序_Jquery_Jquery Mobile_Backbone.js - Fatal编程技术网

Can';t使用主干网和jQuery移动和发送方数据动态绑定Click处理程序

Can';t使用主干网和jQuery移动和发送方数据动态绑定Click处理程序,jquery,jquery-mobile,backbone.js,Jquery,Jquery Mobile,Backbone.js,下面是一个教程: 我正在尝试在呈现listview项时将单击处理程序动态绑定到该项。上面链接中描述的方法不起作用。我试过几种选择 本教程建议在渲染函数中使用此选项:(模板如下) 这是行不通的。按钮被创建了,但是当我点击时什么也没有发生,Chrome的开发工具只显示两个点击事件监听器:document和document 我试过用这些替代品,但没有效果。没有警报消息,没有断点命中,没有注册的单击事件侦听器 $renderedItem.on('click', function(){ al

下面是一个教程:

我正在尝试在呈现listview项时将单击处理程序动态绑定到该项。上面链接中描述的方法不起作用。我试过几种选择

本教程建议在渲染函数中使用此选项:(模板如下)

这是行不通的。按钮被创建了,但是当我点击时什么也没有发生,Chrome的开发工具只显示两个点击事件监听器:document和document

我试过用这些替代品,但没有效果。没有警报消息,没有断点命中,没有注册的单击事件侦听器

$renderedItem.on('click', function(){
       alert("Hello.");
       alert($(this).jqmData('activityId'));     //'this' represents the element being clicked
   });

$renderedItem.live('click', function(){
       alert("Hello.");
       alert($(this).jqmData('activityId'));     //'this' represents the element being clicked
   });
我还尝试了注册事件的标准主干方式,但没有成功

events: {
    'click .activity-list-item':'btnSelected'
},

...

btnSelected: function(){
    alert("Hello");
    //This is what I really want. Some data attached to the sender
    alert($(this).jqmData('activityId'));
}
这是一个模板:

<li><a href="#activity-details" class="activity-list-item"identifier="<%= id %>"><%= date %> - <%= type %></a></li>
…而且它能正常工作。是否有可能移除绑定的原因


编辑2:这仍然没有解决。不幸的是,我的临时解决办法正是这样。我可以删除所有listview项目、重新填充和刷新,并且仍然具有可单击性,但如果我将项目附加到列表中,则它们不可单击。绑定、.on、.live、.delegate。它们都不起作用。我真希望有更多关于这方面的文档。这是一个常见的编程问题,没有通用的解决方案。

看起来jquerymobile可能正在拦截和解除绑定您的事件绑定。这仍然只是一个猜测,因为我现在还没有设置好测试JQM应用程序,但似乎有一种方法可以关闭JQM对链接事件绑定的默认控制,
linkbindingsenabled

您可以这样设置:

$(document).bind("mobileinit", function () {
  $.mobile.linkBindingEnabled = false;
});

试试看,看它是否能让你有所收获。。。如果没有,请回到绘图板:)

代码后面的listView变量会发生什么变化? 更具体地说,listView元素是如何附加到DOM的?
如果在将listView.html()添加到DOM时使用它,则所有子元素都将丢失附加到它们的数据和事件。

我的问题似乎源于多次调用render方法。我有这个:

    //in the render method
    $(this.el).empty();
它用于清除listview并重新绘制新修改的集合。当一个项目被添加到集合中时,我调用render方法来清除所有项目并重新绘制它们

显然,这是从我的视图中删除事件处理程序。这似乎违反直觉。它第一次起作用,为什么不再起作用?jQuery.empty()文档:

为了解决此问题,我在空文件之前添加了一个分离:

   $(this.el).detach();
   $(this.el).empty();
由于我的新手身份,我不确定这是否是一个好的实践,但它是有效的,如果我正确理解了这一点,我将在清除它们之前将事件侦听器从项目中分离出来。这样就为将来的列表项保留了侦听器


本质上,在视图本身$(this.el)上调用.empty()方法似乎会取消在我的呈现函数中使用该方法添加更多事件处理程序的功能。我的猜测是,在执行.empty()之后,还有另一种方法可以添加事件处理程序。如果有人能证实或纠正我的话,我会很高兴的。

谢谢你的建议,但它仍然不起作用(顺便说一句,没有控制台错误。基于对jqm的一些进一步研究,我用一个不同的建议完全修改了我的答案。试试看,让我知道它是否有效。谢谢!我将探索这条途径。这很有效!我必须添加e.preventDefault();方法。否则,单击将导致程序返回主屏幕。非常奇怪。可接受的解决方法,但非常愚蠢和不直观。listView变量是对$(this.el)的引用在本例中,它是“ul”。它仅用于此目的。不再使用。更正…listView是对$(this.el)的引用,我相信它与$('ul')相同。这里有一个关于此主题的好读物:太好了。这家伙似乎完全知道我的障碍和挫折是什么。
    //in the render method
    $(this.el).empty();
    "To avoid memory leaks, jQuery removes other constructs such as data and 
    event handlers from the child elements before removing the elements 
    themselves."
   $(this.el).detach();
   $(this.el).empty();