7

私はbackbone.jsでjQueryMobileを使用しています。ホームページをロードすると、次のエラーが発生します。

Uncaught TypeError: Cannot call method '_trigger' of undefined 

これは私がホームページをロードするために行うことです。ルート.jsで:

routes:{
    '':'home',
}
home:function () {
    new HomeView();
    this.changePage(new HomeContentView());
},
changePage:function (page) {
    $(page.el).attr('data-role', 'page');
    console.log($(page.el));
    page.render();
    $('body').append($(page.el));
    var transition = $.mobile.defaultPageTransition;
    if (this.firstPage) {
        transition = 'none';
        this.firstPage = false;
    }
    $.mobile.changePage($(page.el), {changeHash:false, transition: transition});
}

view.jsで

window.HomeView = Backbone.View.extend({
template : Handlebars.compile($('#home').html()),
render : function (eventname) {
    this.$el.html(this.template());
    this.header = new HeaderElement();
    this.$el.find('div.header_element').append(this.header.$el);
    this.footer = new FooterElement();
    this.$el.find('div.footer_element').append(this.footer.$el);
    return this;
}
});


window.HomeContentView = Backbone.View.extend({
    initialize: function(options) {
        this.collection = new Fan();
        this.template = Handlebars.compile(tpl.get('elements/home'));
        //~ console.log(tpl.get('home'));
        this.collection.on("reset",this.render,this);
        this.init = true;

        if (this.init) {
            upLimit = 1;
            this.collection.index();
            this.init = false;
        }
    },
    el: '#home_content_view',
    render : function (eventName) {
        var self = this;
        var js = (self.collection.toJSON())[0];
        console.log(js);

        $('#home_content_view').html(self.template(js));
        $('#home_content_view').trigger("create");
    }
});

home.htmlで

<div data-role="content">
hi
</div>

エラースタックトレース:

  Uncaught TypeError: Cannot call method '_trigger' of undefined jquery.mobile-1.1.1.js:2843
transitionPages jquery.mobile-1.1.1.js:2843
$.mobile.changePage jquery.mobile-1.1.1.js:3465
Backbone.Router.extend.changePage routes.js:153
Backbone.Router.extend.home routes.js:37
f.extend.route backbone-min.js:27
f.extend.loadUrl backbone-min.js:32
b.some.b.any underscore-min.js:14
f.extend.loadUrl backbone-min.js:32
f.extend.start backbone-min.js:31
(anonymous function) routes.js:162
$.ajax.success view.js:29
v.Callbacks.l jquery-1.8.3.min.js:2
v.Callbacks.c.fireWith jquery-1.8.3.min.js:2
T jquery-1.8.3.min.js:2
v.support.ajax.v.ajaxTransport.send.r jquery-1.8.3.min.js:2

他のページは正しくレンダリングされます。ホームページだけが困っています。どこが間違っているのですか?どうすればこれを解決できますか?

4

2 に答える 2

6

このエラーは、jQuery Mobile が に移行するために要素を配置する必要があるためであると考えられますchangePage。これはハックですが、index.html で属性を「page」に設定して空divを配置すると解決するはずです。data-role

<body>
    <!-- jQM seems to need a page to exist in the document before it transitions to the first dynamically generated one -->
    <div data-role="page"></div>
</body>
于 2013-03-18T13:37:36.460 に答える
0

問題の原因は jquery-mobile バージョン 1.3.0 であることがわかりました。JSM 1.2.0 または 1.2.1 にフォールバックすると、「Uncaught TypeError: 未定義のメソッド 'trigger' を呼び出すことができません」という問題はなくなります。

ところで、私はバックボーンを使用していませんが、問題が発生します。

于 2013-03-25T15:53:00.193 に答える