我有这样的观点

define([
    'jquery',
    'underscore',
    'backbone',
    'models/appModel',
    'text!templates/index.html'
   ],function( $, _, Backbone, AppModel, IndexViewTemplate ){

    var IndexView = Backbone.View.extend({
    initialize: function () {

    },
    render: function () {
        var appModel = new AppModel();

        // fetching the data from the server
        window.appModel = appModel.fetch({

            error: function(){
                console.log('Failed to fetch data from model');
            },
            success: function(results){
                var data = results.attributes.data;

                // using the underscore template engine
                var el = $('#messageList');
                el.append( _.template( IndexViewTemplate, {data:data} ));
            }
        });
    },

    events:{
        'click .message' : 'showMessage'
    },

    showMessage : function () {
        console.log('aome message');
    }
  })

return IndexView;

})


基本上,我从服务器获取数据,并使用下划线模板引擎从该数据在DOM上创建元素。
事实是div元素是在DOM上创建的,但是click事件没有触发,我认为事件是在创建之前分配给元素的,这就是为什么不触发任何原因的原因。

有任何想法吗 ?

最佳答案

骨干网使用称为delegateEvents()的视图方法绑定事件。该方法使用以下方法将事件选择器的作用域限定为视图的事件选择器:

this.$el.on(eventName, selector, method);


如果您想将视图方法绑定到视图外的元素,则必须采用老式的方法,

$(selector).click(this.someMethod);


确保使用Underscore的_.bindAll之类的方法将方法绑定到视图对象,并在处理视图时调用$.off

关于javascript - 下划线模板未触发 Backbone 事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28036967/

10-09 18:07
查看更多