2011-11-20 82 views
1

我有一个小骨架类:如何绑定骨干元素?

view = Backbone.View.extend({ 
    events: { 
     "click textarea" : "doSomething" 
    }, 
    doSomething : function() { 
     var textarea = $(this.el).find('textarea') 
     // I would like to just call, this.textarea, or this.elements.textarea 
    } 
}); 

我非常希望能够通过一个变量来访问,而不必每次搜索的元素我的textarea。任何人有任何想法如何做到这一点?

回答

0

传递事件作为参数,然后使用事件目标

view = Backbone.View.extend({ 

    events: { 
     "click textarea" : "doSomething" 
    }, 
    doSomething : function(event) { 
     var textarea = $(event.target); 

    } 

}); 
+0

但如果我想访问我的Textarea从不同的事件触发不同的功能?明白我的意思了吗? – kidcapital

+0

我将添加此作为另一个答案,因为它不像我期望的那样格式化 – afj176

1

也许我在想,但如何回合给textarea的一类或ID并在需要时专门针对,

或创建生成textarea的

var View = Backbone.View.extend({ 
    el: '#main', 
    initialize: function(){ 
     this.render(); 
    }, 
    render: function() { 
     var subview = new SubView(); 
     this.$('form').append(subview.el); 
     this.$('form').show(); 
    }, 
}); 

var SubView = Backbone.View.extend({ 
    tagName: 'textarea', 
    id: 'whateverId', 
    events: { 
     "click" : "doSomething" 
    }, 
    initialize: function(){ 
     this.render(); 
    }, 
    doSomething : function(event) { 
     var textarea = $(event.target); 
     // or var textarea = $(this.el); 
    }, 
    render: function(){ 
     return $(this.el); 
    } 
}); 
1

其他的答案给你,你需要参考一个子画面,但如果你真的需要一个句柄textarea的,然后你可以做这样的事情:

view = Backbone.View.extend({ 
    initialize: function() { 
    this.myTextareaElement = $(this.el).find('textarea') 
    } 
    events: { 
    "click textarea" : "doSomething" 
    }, 
    doSomething : function() { 
    // use this.myTextareaElement ... 
    } 
}); 
+0

如果要在渲染函数中添加文本区域或将已呈现的DOM元素作为el传递到视图中,这可能会或可能不会起作用。 – poezn