【问题标题】:Backbone Collection get(id) method骨干收集 get(id) 方法
【发布时间】:2013-08-05 17:28:48
【问题描述】:

我的应用程序中有一个主页,每个帖子都有另一个页面,可以通过主页中显示的列表访问。

这就是我的路由器的样子:

var AppRouter = Backbone.Router.extend({

    initialize: function(){
        this.model = new model();
        this.collection = new collection();
    },


    routes: {
        "" : "showForm",
        "post/:id" : "showPost"
    },


    showPost: function(id){
        var curmodel = this.collection.get(id);
        var post = new postView({model:curmodel});
        post.render();
        $(".maincontainer").html(post.el);

    },

    showForm : function(){
        var qcView = new qcV({model:this.model, collection:this.collection});
        qcView.render()
        $(".maincontainer").html(qcView.el);
    }
});

这是此列表中帖子的链接之一的样子

<h2><a id= "<%=_id%>" href="#post/<%=_id%>"><%=name%></h2></a>

我的第一个问题是:以这种方式使用基于哈希的 URL 链接页面是否危险?

我的第二个问题是:如果我单击主页中的某个链接,导航到帖子视图没有问题。我的 url 成功更改为 http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034 之类的内容,并且呈现了该特定帖子的视图。但是,此时如果我刷新页面,或者如果我直接在我的 URL 栏中键入 http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034,那么路由器中我的 showPost 方法中的 this.collection.get(id) 方法将返回 undefined。谁能帮我弄清楚为什么会这样?

我检查了几次,我的初始化方法都被调用了,我的集合和模型都成功创建了

【问题讨论】:

    标签: javascript backbone.js backbone-routing


    【解决方案1】:

    对于 #2,您很可能不会在“发布”路线上获取集合。尝试获取集合(如果它不存在),然后调用 render.这应该可以解决问题!

    【讨论】:

    • 它真的很有趣,因为集合存在,当我在控制台中打印它时可以看到它。我什至可以看到我正在寻找的模型
    • 我们显然遗漏了一些重要的东西。您在哪里获取数据?
    【解决方案2】:

    我认为@Trunal 在第二个问题上是正确的。首先,不,这不是“危险的”。与经典的服务器端应用程序相比,您并没有真正做任何不同的事情,通过 GET 将信息传递到服务器以检索信息。在我看来,这应该是实现路由的首选方法(而不是尝试手动触发backbone.history.navigate,因为它避免了可能发生的各种设置和事件问题)。

    【讨论】:

    • 感谢您的回答,但我很确定第二个问题还有其他问题。即使我尝试在列表中的新选项卡中打开链接,它也不会呈现帖子
    • @trunal 抱歉,你们完全正确。我只需将代码放入 this.collection.fetch().complete(function(){});
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多