0

我正在尝试更改页面并显示带有 JQM 和主干的视图。

我的主页加载正常,但是当我尝试转到第二页时 - 这是我有几个问题的时候。页面加载但没有显示

所以我的应用程序有一个路由器

 var AppRouter = Backbone.Router.extend({
//define routes and mapping route to the function
    routes: {
        '':    'showHome',         //home view
        'home': 'showHome',        //home view as well
        'products/productList' : 'showProducts',

    },

    initialize:function () {
    // Handle back button throughout the application
    $('.back').live('click', function(event) {
        window.history.back();
        return false;
    });
    this.firstPage = true;
    },

    defaultAction: function(actions){
        this.showHome();
    },

    showHome:function(actions){
        // will render home view and navigate to homeView
        var homeView=new HomeView();
        homeView.render(); 

        this.changePage(homeView, 'fade');
    },



    showProducts:function(){

    var productList=new Products();
    var self = this;

      productList.fetch({
         success:function(data) {   
        self.changePage(new ProductListView({collection:data}));
         }
            }); 

    },

    changePage:function (view, transition) {
        //add the attribute 'data-role="page" ' for each view's div

        if (transition != "slidefade") {
         transition = "pop";                
        }

        view.$el.attr('data-role', 'page');   
        $('.ui-page').attr('data-role', 'page');

        //append to dom
        $('body').append(view.$el);  


        if(!this.init){   
            $.mobile.changePage($(view.el), {changeHash:false, transition: transition});


        }else{   
            this.init = false;
        }            
    }       

});

$(document).ready(function () {
console.log('App Loaded');
app = new AppRouter();
Backbone.history.start();
});

return AppRouter;

这也是我的产品查看页面

var ProductListView = Backbone.View.extend({

template: _.template(productViewTemplate),

initialize: function () {
        _.bindAll(this, "render");
     this.collection.bind("reset", this.render);
    },

 render: function () {
 var self = this;
        this.collection.each(function(model) {
        self.$el.append(self.template(model.toJSON())); 
        console.log("here");
 });


}

});

return ProductListView;

因此,从 homeView 中我可以更改页面,这很好,我在产品视图上做错了什么,因为它不返回任何东西.. 没有返回错误。

谢谢


所以我做了更多的工作并使我的展示产品功能

showProducts:function(){

        var productList=new Products();
        var self = this;
        var productListView =new ProductListView({collection:productList});

 productList.fetch(self.changePage(productListView)); 

    }

当视图为

var ProductListView = Backbone.View.extend({

template: _.template(productViewTemplate),
initialize : function () {
    _.bindAll(this, "render");
    this.collection.bind("reset", this.render, this);

},

 render: function() {
 var self = this;
        this.collection.each(function(model) {
        self.$el.append(self.template(model.toJSON())); 
        console.log("here");
 });


}

});

return ProductListView;

但是现在 jQueryMobile 没有添加它的代码,所以它没有样式..

有什么建议么?

4

1 回答 1

0

Backbone.js 的路由器和 jQuery Mobile 都使用hashtag并且不能很好地协同工作。有一些方法可以让它们工作,但除非你有特定的理由这样做,否则我不确定它是否值得,相反,我建议使用jQuery-Mobile-router这是一个 jQuery Mobile 插件,它是为此创建的非常原因(即使用 Backbone.js)。作为奖励,jQuery Mobile 路由器与特殊的 JQM 页面事件相关联。

于 2012-12-06T14:38:38.847 回答