2013-06-04 106 views
3

好吧,我有一个父视图,它有一个呈现子视图的单击事件。在这个子视图内是一个我试图验证然后提交的表单。所以我父视图看起来是这样的:骨干嵌套视图有没有触发的事件

var MapView = Backbone.View.extend({ 
    el: '.body', 
    template: _.template(MapTemplate), 
    render: function() { 
     ... 
    }, 
    events: { 
     'click #log-pane-title': 'loadLogView' 
    }, 
    loadLogView: function() { 
     var eventLogView = new EventLogView({ 
      id: properties._id 
     }); 

     eventLogView.render(); 
    } 
}); 

我的子视图看起来是这样的:

var EventLogView = Backbone.View.extend({ 
    el: '#eventlog', 
    logform: new NewLogForm({ 
       template: _.template(AddLogTemplate), 
       model: new LogModel() 
      }).render(), 
    render: function() { 
     // Render the form 
     $("#addtolog").html(this.logform.el); 
    }, 
    events: { 
     'submit #addlogentry': 'test' 
    }, 
    test: function() { 
     alert('inside eventlogview'); 
     return false; 
    } 
}); 

我现在面临的问题是,test()永远不会触发。出于调试目的,我确信提交事件甚至被解雇通过将:

$('#addlogentry').on('submit', function() { 
    alert("submit firing"); 
    return false; 
}); 

EventLogViewrender()。这实际上触发,所以我不知道发生了什么,为什么test()不触发。

+0

骨干事件被限定在欣赏到El。那么你的'#addlogentry'是否在你的'EventLogView'“视图”中?所以在你的情况下,适当的测试将是:'this。$ el.on('submit','#addlogentry',function(){' – nemesv

+0

@nemesv就是这样!发布这个答案,我会接受。 谢谢! –

回答

2

为避免范围问题所有events代表团的范围限制在主干中的视图el

因此,您的#addlogentry按钮应该存在于EventLogViewel之内。

而在render你仔细的检查应该是这个样子模仿骨干的内部工作原理:

this.$el.on('submit', '#addlogentry', function() { 
    alert("submit firing"); 
    return false; 
});