在我的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});
});
答案 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(免责声明:它来自我正在编写的应用程序),并尝试查找其他任何差异。
希望有所帮助。