Meteor应用程序 - Backbone路由器未被调用

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});
});

我怀疑这与加载速度/顺序有关,当登录时,加载需要更长时间,导致appRouter准时就绪。尝试将appRouter声明放在Meteor.startup内部。 - Rahul
尝试了这个,Rahul - 没有起作用。 - squeezemylime
我还没有开发过Win8 Metro应用程序,所以我不知道是否有像浏览器中那样的开发控制台。如果有的话,我会在Backbone.history.start({pushState: true});之前调用appRouter = new Aphorism;,并将appRoute分配给全局变量,以查看它是否已初始化。 - wowpatrick
3个回答

1
尝试将Backbone历史声明移出。没有理由让它在那里。此外,我认为只有当你转到具有参数的路由时(即,您不能只转到),才会调用。
另外,如果您正在尝试以编程方式导航,则可能需要手动调用以使路由器正常工作。(我不知道您是否这样做了,但这可能是问题所在)。
除此之外,我在这个特定代码片段中找不到任何问题。如果我提出的建议都无法解决问题,那么问题可能出在其他地方。
关于一个可行的路由实现示例,您可以查看https://github.com/Benaiah/Athenaeum/blob/master/client/router.coffee(免责声明:它来自我正在编写的应用程序),并尝试找到其他区别。
希望能有所帮助。

1

你的问题似乎与Backbone.js无关。

你是否尝试在startup()回调函数内部添加console.log语句来验证它在所有情况下都被调用了?如果没有,那就是你和Meteor之间的问题了。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接