【问题标题】:Backbone event triggering and event binding主干事件触发和事件绑定
【发布时间】:2017-03-02 15:50:44
【问题描述】:

我是骨干新手。我只想了解全局事件触发并为每个事件绑定回调。我试过这样...

landing.view.js

'use strict';

var $ = require('jquery');
var Backbone = require('backbone');
var _ = require('underscore');
var tpl = require('text!components/landing-page/templates/landing-page.html');

return Backbone.View.extend({

    el: '.view-container',

    template: _.template($(tpl).html()),

    events:{
        'click .btn-show': 'showUsersListHandler'
    },

    initialize: function(){

        this.render();
    },

    render: function(){

        $(this.el).html(this.template);
        return this;
    },

    showUsersListHandler: function(evt){   
        Backbone.trigger('userPage', {trigger:true});
    }
});

another.view.js

'use strict';

var Backbone = require('backbone');
var _ = require('underscore');
var $ = require('jquery');
var tpl = require('text!components/user-logs-listing/templates/user-logs-listing-tpl.html');

return Backbone.View.extend({

    el: '.users-list-container',

    template: _.template($(tpl).html()),

    initialize: function(){
        this.render();
    },

    render: function(){

        $(this.el).html(this.template);
    }

});

应用路由器

'使用严格';

var $ = require('jquery');
var Backbone = require('backbone');
var viewContainer = require('inits/utils');
var landingView = require('components/landing-page/views/landing-page');
var userListingView = require('components/user-logs-listing/views/user-logs-listing.view');

return Backbone.Router.extend({

    routes: {
        "": "landing",
        "usersList": "usersPage"
        //'*path':  'defaultRoute'
    },

    initailize: function(){ 
    Backbone.listenTo(Backbone, 'userPage', this.usersPage)

    },

    landing: function(){

        viewContainer.createContainer('view-container');
        new landingView();
    },

    usersPage: function(){

        //$('.view-container').remove();
        viewContainer.createContainer('users-list-container');
        new userListingView();
    }
});

如果我点击登陆视图中的按钮,它应该会触发“userPage”并导航到#UsersPage。问题是如何触发和绑定全局事件的回调????帮我找到正确的解决方案!!!谢谢。

【问题讨论】:

  • 全局事件是什么意思?
  • 正如我在问题中提到的,如果我没记错的话,当我在登陆视图中触发 'userPage' 事件时,应该呈现另一个视图。我已在路由器中附加了事件响应,但它不起作用?

标签: javascript jquery backbone.js


【解决方案1】:

好的,我会建议这样做:

创建一个新文件 Events.js

Events.js

define(['underscore',
  'backbone'
], function(_, Backbone) {
  "use strict";
  return _.extend({}, Backbone.Events);
});

现在,在 landing.view.js

    var $ = require('jquery');
    var Backbone = require('backbone');
    var _ = require('underscore');
    var Events = require('Events');
    var tpl = require('text!components/landing-page/templates/landing-page.html');

-----
    Events.on('customEvent1',this.customCallback1);
-----

同样,在 another.view.js

var Backbone = require('backbone');
var _ = require('underscore');
var Events = require('Events');
var $ = require('jquery');
var tpl = require('text!components/user-logs-listing/templates/user-logs-listing-tpl.html');

-----
    Events.on('customEvent2',this.customCallback2);
-----

现在,您想在任何地方触发这些自定义事件,请执行以下操作:

Events.trigger('customEvent1');

Events.trigger('customEvent2');

并在任何你想使用的地方包含事件文件。

希望对你有帮助!!

【讨论】:

  • 这个方法我试过了,不行!!!问题是,监听器中附加的事件没有在“Backbone._events”(即触发函数)中注册
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多