Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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
Javascript 如何使用递归Backbone.js视图防止多次偶数触发?_Javascript_Backbone.js - Fatal编程技术网

Javascript 如何使用递归Backbone.js视图防止多次偶数触发?

Javascript 如何使用递归Backbone.js视图防止多次偶数触发?,javascript,backbone.js,Javascript,Backbone.js,我有一个应用程序,其中有一个嵌套列表,我正试图用主干管理它。每个单独的元素都有一个视图,但每个列表元素都有自己的嵌套标记,该标记有自己的视图实例化。以下是一个例子: HTML <ul class='elements'> <li class='element'> <div> <a class='edit-element'>Edit</a> </div> <ul class=

我有一个应用程序,其中有一个嵌套列表,我正试图用主干管理它。每个单独的
  • 元素都有一个视图,但每个列表元素都有自己的嵌套
    标记,该标记有自己的视图实例化。以下是一个例子:

    HTML

    <ul class='elements'>
      <li class='element'>
         <div>
           <a class='edit-element'>Edit</a>
         </div>
         <ul class='elements'>
           <li class='element'>
             <div>
               <a class='edit-element'>Edit</a>
             </div>
           </li>
         </ul>
       </li>
    </ul>
    

    问题是,如果我单击一个子元素,两个视图都会在那里触发edit_元素事件,这是有问题的,原因有几个。我如何构造它,以便当我单击子
  • 中的链接时,它为该
  • 触发,而不是任何包含它的
  • 触发?

    主干的事件处理程序只是普通的旧jQuery事件处理程序,因此您可以使用以下方法停止传播:

    演示:

    或者通过返回
    false

    edit_element: function(event) {
        //...
        return false;
    }
    

    演示:

    主干网的事件处理程序只是普通的老jQuery事件处理程序,因此您可以使用以下方法停止传播:

    演示:

    或者通过返回
    false

    edit_element: function(event) {
        //...
        return false;
    }
    
    演示:

    除了前面说过的“mu太短”之外,我可以想出三种方法来解决这个问题。按照我个人的偏好顺序:

  • 使用更具体的选择器。在这种特殊情况下,
    单击.edit element:first
    可能会起作用,因为编辑按钮位于子列表的编辑按钮之前
  • 不要使用主干
    events
    集合,而是直接绑定到您感兴趣的元素。因此,在呈现子列表之前,请执行类似以下操作:
    this.$(“.edit element”)。单击(u.bind(myClickHandler,this))
  • 将代码放在处理函数中,查看单击了哪个元素,并查看它是否是您感兴趣的元素。这方面的代码有点复杂,我认为这不是一个特别好的解决方案,因此没有示例代码。:) 除了已经说过的“穆太短”之外,我可以想出三种方法来解决这个问题。按照我个人的偏好顺序:

  • 使用更具体的选择器。在这种特殊情况下,
    单击.edit element:first
    可能会起作用,因为编辑按钮位于子列表的编辑按钮之前
  • 不要使用主干
    events
    集合,而是直接绑定到您感兴趣的元素。因此,在呈现子列表之前,请执行类似以下操作:
    this.$(“.edit element”)。单击(u.bind(myClickHandler,this))
  • 将代码放在处理函数中,查看单击了哪个元素,并查看它是否是您感兴趣的元素。这方面的代码有点复杂,我认为这不是一个特别好的解决方案,因此没有示例代码。:)
    edit_element: function(event) {
        //...
        return false;
    }