Meteor app - Backbone路由器没有被调用

时间:2013-01-26 21:58:07

标签: javascript backbone.js meteor router

在我的Meteor应用程序中,Backbone路由器仅在用户登录时工作(通过基于帐户的程序包)。真奇怪。这个路由器本身工作正常。当用户未登录时,根本不会调用showSaying()函数。

以下是客户端文件夹中client.js中的代码。我是否需要对会话或自动发布做些什么?

AphorismView = Backbone.View.extend({
el: "#aphorism-item",
initialize: function(){
    _.bindAll(this, "render");
    this.render();
},
render: function() {
    this.$el.append("<p style='height:600px; background-color:blue;'>hi</p>");
}
});

// Creates a route to view the selected aphorism
var Aphorism = Backbone.Router.extend({
    routes: {       
        "saying/:id": "showSaying"
    },
    showSaying: function (id) {
        var aphorism_view = new AphorismView();
        alert('Saying id ' + id + '.');
  }
});

//establishes the router
appRouter = new Aphorism;

//Sets up backbone
Meteor.startup(function () {
    filepicker.setKey("AerIOvsmAQRGaNdEv0judz");
    filepicker.constructWidget(document.getElementById('attachment'));
    Backbone.history.start({pushState: true});
});

3 个答案:

答案 0 :(得分:1)

您的问题根本不像Backbone.js问题。

您是否尝试在startup()回调中放置一个console.log语句来验证它是否在所有情况下都被调用?如果没有,那就是你和流星之间的。

答案 1 :(得分:1)

您是否尝试过等待DOM准备好了?例如:$( Backbone.history.start )

答案 2 :(得分:1)

尝试在Meteor.start之外提取Backbone历史声明。它没有理由在那里。另外,我相信只有当您转到具有showSaying参数的路线时才会调用id(即,您不能只转到http://app/saying/)。

此外,如果您尝试以编程方式导航,则可能需要手动调用approuter.navigate以使路由器正常工作。 (我不知道你是不是,但可能是问题所在。)

除此之外,我发现这段特定代码没有任何问题。问题可能在其他地方,如果我建议没有解决它。

有关工作路由器实现的示例,您可以查看https://github.com/Benaiah/Athenaeum/blob/master/client/router.coffee(免责声明:它来自我正在编写的应用程序),并尝试查找其他任何差异。

希望有所帮助。