Backbone单击“事件属性”

时间:2012-02-17 14:42:28

标签: javascript backbone.js backbone-events

我在这里使用了backbone.js'click'事件。 onClick事件,我想选择点击的HTML元素,删除它并添加到添加的列表中。

我无法访问我点击的所有HTML dom元素。获取HTML元素后。

如果我点击“中国”,则以下代码会提醒“<li>China</li>”。

那么,我如何访问所有dom属性?

Java脚本代码:

var ActionBox = Backbone.View.extend({
        el:$("#container"),
        events: {
                    "click #add li": "addItem",
                    "click #alert": "alertHere"
        },
        initialize: function(){     
                _.bindAll(this,"addItem","render");             
                this.render();  
        },
        render:function(){  
                this.prepareActions();          
        },
        addItem:function(ev){
                var ac=$(ev.target).html(); // it doesn't give me "<li>US</li>" after clicking US
                alert(ac);
                },
        prepareActions:function(){          
                    var str="";
                    for(var i=0;i<actions.length;i++)   str+="<li>"+actions[i]+"</li>";                         
                    $("#add ul").append(str);
        }       
    });    
var actionBox = new ActionBox();

和HTML代码如下:

    <div id="container">
    <table>
    <tr>
        <td>
            <div id="add">      
                <ul>
                 <li>US</li>
                 <li>China</li>
                 <li>UK</li>
                </ul>
            </div>
        </td>
        <td>
            <div id="controls">

            </div>
        </td>
        <td>
            <div id="added">        
                <ul></ul>
            </div>
        </td>
    </tr>
    </table>        
</div>

有两个ul容器,添加和添加,如果我点击源中的元素,它应该被移动到目标容器中。

2 个答案:

答案 0 :(得分:6)

您只想使用appendTo - 这会删除它并将其放入#added UL

$(ev.target).appendTo('#added');

答案 1 :(得分:0)

我尝试使用Backbone 0.9.1自己运行它,一切正常。确保你包括

var ActionBox = Backbone.View.extend({
    el:$("#container"),
    ...      
});
在呈现HTML之后

。否则,您在DOM中实际存在之前指定$("#container")。如果你这样做,jQuery将不返回任何内容,因此将el设置为空数组,因此您的事件将被绑定为任何内容......因此它们永远不会被调用。

这是一个有效的jsFiddle:http://jsfiddle.net/8jyeb/1/。请注意,您必须将所有JavaScript包装在jQuery DOM Ready处理程序中。这将确保在加载HTML之前代码不会运行。