繁体   English   中英

在事件中为选择器使用变量

[英]Using variable for selectors in events

由于某种原因,我需要使用一个变量作为骨干事件的选择器,但我无法想象如何做到这一点:

app.views.Selfcare = Backbone.View.extend({
    events: {
        click window.parent.document .close : "closeWindow"
    },
    closeWindow: function() {
        //code
    }
});

我必须使用不同的范围,我不能做“click .close”:“closeWindow”。

谢谢你的帮助。

我查看了Backbone.js的源代码,发现如果你的视图的events是一个函数,那么函数被调用,它的返回值被用作events对象。

这意味着您的代码可以像这样更改:

app.views.Selfcare = Backbone.View.extend({
  events: function() {
    var _events = {
      // all "standard" events can be here if you like
    }
    _events["events" + "with variables"] = "closeWindow";
    return _events;

  },
  closeWindow: function() {
    //code
  }
});

是源代码中有趣的部分:

if (_.isFunction(events)) events = events.call(this);

更新:

JSFiddle HERE上提供了示例**

我不确定你能否在那里使用变量。 您可以使用内置的Events方法(请参阅文档 )添加自定义侦听器,然后向window.parent.document添加一个事件侦听器以触发该自定义事件(使用Events.trigger方法)。

也就是说,将此事件与Backbone完全分离会更容易(除非您不想这样做),然后沿着addEventListener路由:

app.views.Selfcare = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'render', 'closeWindow');
        if(this.options.clickTarget) {
            this.options.clickTarget.addEventListener('click', this.closeWindow, false);
        }
    },
    render: function() {
        // Render to the DOM here
        return this; // as per Backbone conventions
    },
    closeWindow: function() {
        // Stuff here
    }
});

// Usage:
var mySelfcare = new app.views.Selfcare({
    clickTarget: window.parent.document
});

我认为这应该有用,虽然我没有测试过(并且可能有一两个语法错误!)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM