Javascript 主干网事件不';不要在车把模板中工作

Javascript 主干网事件不';不要在车把模板中工作,javascript,backbone.js,require,handlebars.js,Javascript,Backbone.js,Require,Handlebars.js,我是个新手,我不明白为什么这件事不会发生。 我尝试了几种不同的方法,但每种方法都不起作用。 屏幕正在渲染。 我正在用最新的cordova手机进行测试 login.js define(["jquery", "underscore", "kinvey", "handlebars", "text", "text!templates/Login.html"], function ($, _, Kinvey, Handlebars, Text , source) { var Login = Back

我是个新手,我不明白为什么这件事不会发生。 我尝试了几种不同的方法,但每种方法都不起作用。 屏幕正在渲染。 我正在用最新的cordova手机进行测试

login.js

define(["jquery", "underscore", "kinvey", "handlebars",  "text", "text!templates/Login.html"],
function ($, _, Kinvey, Handlebars,  Text , source) {
 var Login = Backbone.View.extend({
    events: {
        "touchend #submit": "loggati",
        "touchend #signup": "goToSignup"
        },

    initialize: function () {
        console.log("init"); 

         /*  won't go this way either
            $('#submit').click(function(){
                alert('ciao');
            });
            $('#signup').click(function(){
                alert('ciao');
         */
            });
    },

    render: function (eventName) {
        console.log("rendering"); 
        var template = Handlebars.compile(source);
        var context = {color : "blue"};
        var html=template(context);
        $(document.body).html(html);

        return this;
    },

    goToSignup: function () {
        console.log("signup : fired"); 
        //stuff
    },

    loggati: function() {
        console.log("loggati : fired"); 
       //stuff
       }
});

return Login;

});
define(["jquery", "underscore", "kinvey", "views/Login", "views/GetToken", "views/Game",   "views/SignupPage", "views/Home", "views/Settings", "views/Rules"],
    function ($, _, Kinvey, Login, GetToken, Game, SignupPage, Home, Settings, Rules) {
    var Router= Backbone.Router.extend({
        routes: {
            "login": "login",
            "getToken": "getToken",
            "game": "game",
            "signupPage": "signupPage",
            "home": "home",
            "settings": "settings",
            "rules": "rules"
        },

        initialize: function () {
            console.log('initialize');
            this.currentView = undefined;
            var page;
            if( window.localStorage.getItem("username") && window.localStorage.getItem("username").length > 0)
            {       
                console.log('trovato utente loggato');
                document.getElementById("nomeSet").innerHTML = window.localStorage.getItem("username");
                document.getElementById("tokenSet").innersHTML = window.localStorage.getItem("token");
                page = new Home();
            }
            else 
                page = new Login();

            this.changePage(page);
            },

        login: function () {
                var page = new Login();
                this.changePage(page);
              },

        getToken: function () {
            var page = new GetToken({
            });
            this.changePage(page);
          },

        game: function () {
            var page = new Game({
            });
            this.changePage(page);
          },

        signupPage: function () {
            var page = new SignupPage({
            });
            this.changePage(page);
          },

        home: function () {
            var page = new Home({
            });
            this.changePage(page);
          },

        settings: function () {
            var page = new Settings({
            });
            this.changePage(page);
          },

        rules: function () {
            var page = new Rules({
            });
            this.changePage(page);
          },

        changePage: function (page) {
        console.log('changepage '+page);
            if(this.currentView) {
               this.currentView.remove();
               this.currentView.off();
                }
            this.currentView = page;
            page.render();

            }
    });

    return Router;
});
Login.html

 <div data-role="header" >
            <h1>Login</h1>
</div>
<div data-role="content">
                <div data-role="fieldcontain">
                    <input id= "username" placeholder="Username" value="" type="text">
                </div>
                <div data-role="fieldcontain">
                        <input id= "password" placeholder="Password" value="" type="password">
                </div>
                <a data-role="button" id="submit">Sign In</a>
                <a data-role="button"  id="signup">Register</a>
</div>

主干视图的事件通过事件委派附加到其
el
。每个视图都有一个,如果您自己没有指定一个,那么您的视图将使用一个空的
作为其
el
。您没有在任何地方指定
el
,因此视图将为您创建一个
,作为
el
render
方法通常如下所示:

render: function() {
    var html = html_from_some_template;
    this.$el.html(html);
    return this;
}
但你是说:

$(document.body).html(html);
添加HTML。您视图的
el
不是
body
,因此您的事件都不起作用

快速修复方法是添加:

el: 'body'
修改视图定义,然后将渲染更改为:

this.$el.html(html);

你在哪里实例化你的视图?我正在添加路由器