1

我正在尝试在呈现 html 后立即手动触发单击事件,但它不起作用。

为了简化并验证它是否不起作用,我尝试了以下代码:

var _testView = Backbone.View.extend({

   events : {
    'click a' : 'sayHi'
   },

   initialize : function() {
    this.render();
    this.$el.find('a').trigger('click');
   },

   render : function() {
    $(document.body).html(
        this.$el.html('<a href="#">alert hi</a>')
    );
   },

   sayHi : function() {
    alert('Hi');
    return false;
   }

});

var y = new _testView;

我正在尝试手动触发点击事件,但它没有被触发。如果我要将触发器放在延迟为 500 的 setTimeout 中,它将起作用。我不知道为什么.... thx

4

3 回答 3

1

我找到了答案。我查看了 Backbone 核心,发现在将事件附加到视图之前首先调用了初始化方法。

View = Backbone.View = function(options) {
    this.cid = _.uniqueId('view');
    this._configure(options || {});
    this._ensureElement();
    this.initialize.apply(this, arguments);
    this.delegateEvents();
  };
于 2013-04-14T08:33:58.427 回答
0

您正在调用尚未创建的元素上的单击事件。您应该在渲染完成时调用该函数,或者您可以调用 this.sayHi() 而不是触发点击。

于 2013-04-13T21:06:40.507 回答
-1

hjuster 是正确的。$(document.body) 等待“文档就绪”事件,并且您在文档准备好之前调用 new _testView。您可以将您的初始化更改为此 - 它在文档准备好后将触发器排队执行。

initialize : function() {
    this.render();
    var self = this;   
    $(function(){
        self.$el.find('a').trigger('click');
    });
},

我添加了 var 'self' 因为你不能引用 'this' 来获取函数中的 _testView 对象。

它适用于这个小提琴

于 2013-04-13T21:27:16.930 回答