子视图主干渲染上的事件

Posted

技术标签:

【中文标题】子视图主干渲染上的事件【英文标题】:Events on subview backbone render 【发布时间】:2015-06-17 17:11:08 【问题描述】:

我正在尝试渲染依赖于另一个父视图的多个子视图。 在子视图上创建渲染功能时,问题就来了。此子视图正确显示,但关联的事件尚未初始化且无法正常工作。

这是代码。

 onSuccess : function(data) 
            this.asignView(this.subView1, '#div1', data.data1);
            this.asignView(this.subView2, '#div2', data.data2);

        ,

...........

这是子视图的代码..

 events : 
    'clickT' : 'clickT',
,

 render : function(model) 
    $(this.el).html(this.template(
        model: model
    ));
    return this;
,

clickT: function()

......

分配给子视图的方法是....

asignView : function(view, selector, options) 
    view.setElement(this.$(selector)).render(options);
,

那么,我该如何解决这个问题?

【问题讨论】:

您希望在单击子视图时执行 clcickT?首先,是 clcickT 错字吗?你的事件映射是直接到clickT 而不是clcickT 抱歉,这是一个错误类型。函数是clickT。我的代码中有正确的名称。这不是问题。谢谢'fuyushimoya'。 那么当你点击子视图时,clickT 不会被执行? 不,它对事件没有响应。 【参考方案1】:

奇怪的是,我尝试将你的一些代码复制到 jsfiddle,它似乎可以工作,你能指出我们的代码之间的其他区别吗?

var asignView = function(view, selector, options) 
    view.setElement(this.$(selector)).render(options);
;

var SubView = Backbone.View.extend(
    template: _.template('<span>A subView with id <%= model.id %>!</span>'),
    events: 
        'click': 'clickT'
    ,
    render : function(model) 
        $(this.el).html(this.template(
            model: model
        ));
        return this;
    ,
    
    clickT: function() 
        alert('Clicked');
    
);

var subView1 = new SubView()
,subView2 = new SubView();

asignView(subView1, '#div1', id: 1);
asignView(subView2, '#div2', id: 2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.1/backbone-min.js"></script>
<div id="div1"></div>
<div id="div2"></div>

【讨论】:

嗨¡ 感谢您的回答。我正在寻找我们的代码之间的任何差异,但它是相等的。我尝试在子视图中使用 this.delegateEvents() 方法,但它对我不起作用……有什么想法吗? 你用chrome dev-tool检查有没有出错? 啊!将'clickT' : 'clickT' 更改为'click' : 'clickT',这可能是问题所在。 不,这不是问题...问题与主干中的子视图和delegateEvents有关,当子视图已渲染时,子视图的#element _dom不存在,并且相关的事件无法识别,但我不知道如何解决。 但在backbonejs.org/docs/backbone.html 中,它的setElement 为您将事件绑定到输入元素。而且,如果这是另一个错字,最好将 'clickT' : 'clickT' 更改为 'click' : 'clickT'。

以上是关于子视图主干渲染上的事件的主要内容,如果未能解决你的问题,请参考以下文章

为父级调用渲染的主干子视图

(重新)在更改事件处理程序中渲染主干视图不起作用

带有 Marionette 视图的主干模式 - 子视图事件没有被触发

重新初始化主干视图后未触发事件

在主干中渲染集合模型

初始加载时主干视图未正确显示