1

问题:

视图内设置的事件不会在视图被替换为其他内容后触发$element.html(anotherView),然后使用#element.html(theView).

例子:

var BuggyView = Backbone.View.extend({
    // Event works the at first, but not after the view is replaced, then added back
    //     onto the page
    events:{
        'click #some-element': 'on_click_some_element'
    },
    // This function gets called before the view is replaced by another view, but
    //     not after it is added back into the page the second time
    on_click_some_element:function(event){
        alert('User clicked "some element"');
    }
});

执行此代码后,事件起作用:

// Create the new view:
var buggyView = new BuggyView({});
// Add the view to the page
$element.html(buggyView.el);

当页面上的视图被其他内容替换时,此代码将在稍后发生:

$element.html(anotherView.el);

将视图添加回页面后,事件不再起作用:

$element.html(buggyView.el);
4

2 回答 2

1

在 DOM 中设置视图的元素后运行渲染:

$element.html(anotherView.el);
anotherView.render();

$element.html(theView.el);
theView.render();

可能您的问题是渲染没有再次运行。您只是在切换 DOM 分配。

于 2012-07-24T20:01:55.333 回答
1

最有可能的是,当您删除视图时,您也会删除视图的绑定事件,您可能需要重新定义您的事件。或代替使用 (jquery) 。删除使用.detach

于 2012-07-24T20:02:10.417 回答