13

在我的 Meteor 应用程序中,Backbone 路由器仅在用户登录时工作(通过 accounts-base 包)。真奇怪。该路由器本身工作正常。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});
});
4

3 回答 3

1

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

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

于 2013-02-04T01:05:04.687 回答
1

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

于 2013-02-05T12:05:21.867 回答
1

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

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

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

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

希望有帮助。

于 2013-04-09T08:32:52.047 回答