首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Backbone.js视图-将事件绑定到"el“之外的元素

Backbone.js视图-将事件绑定到"el“之外的元素
EN

Stack Overflow用户
提问于 2011-11-26 05:12:10
回答 1查看 20.7K关注 0票数 18

this问题的第二个答案很好地解释了如何将Backbone.js视图中的事件声明限定为视图的el元素的作用域。

这似乎是一个合理的用例,希望将事件绑定到el作用域之外的元素,例如页面不同部分上的按钮。

实现这一目标的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2011-11-26 07:38:00

没有真正的理由要绑定到视图外部的元素,有其他方法可以做到这一点。

该元素很可能在它自己的视图中(如果不是,考虑给它一个视图!)既然它在它自己的视图中,为什么不在那里进行绑定,并在回调函数中使用 .trigger();来触发事件。

在当前视图中执行subscribe to that event,并在触发事件时触发正确的代码。

看一下JSFiddle,http://jsfiddle.net/xsvUJ/2/中的这个例子

下面是使用的代码:

var app  = {views: {}};

app.user = Backbone.Model.extend({
    defaults: { name: 'Sander' },
    promptName: function(){
        var newname = prompt("Please may i have your name?:");
        this.set({name: newname});
    }
});

app.views.user = Backbone.View.extend({
    el: '#user',
    initialize: function(){
        _.bindAll(this, "render", "myEventCatcher", "updateName");
        this.model.bind("myEvent", this.myEventCatcher);
        this.model.bind("change:name", this.updateName);
        this.el = $(this.el);
    },
    render: function () {
        $('h1',this.el).html('Welcome,<span class="name">&nbsp;</span>');
        return this;
    },
    updateName: function() {
        var newname = this.model.get('name');
        console.log(this.el, newname);
        $('span.name', this.el).text(newname);
    },
    myEventCatcher: function(e) {
        // event is caught, now do something... lets ask the user for it's name and add it in the view...
        var color = this.el.hasClass('eventHappened') ? 'black' : 'red';
        alert('directly subscribed to a custom event ... changing background color to ' + color);
        this.el.toggleClass('eventHappened');

    }
});

app.views.sidebar = Backbone.View.extend({
    el: '#sidebar',
    events: {
        "click #fireEvent" : "myClickHandler"
    },
    initialize: function(){
        _.bindAll(this, "myClickHandler");
    },
    myClickHandler: function(e) {
        window.user.trigger("myEvent");
        window.user.promptName();
    }
});


$(function(){
    window.user = new app.user({name: "sander houttekier"});
    var userView = new app.views.user({model: window.user}).render();
    var sidebarView = new app.views.sidebar({});
});
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8274257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档