1

アプリケーションに 1 つのメイン ホームページと、ホームページに表示されるリストからアクセスできる各投稿用の別のページがあります。

これは私のルーターがどのように見えるかです:

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

これは、このリストの投稿へのリンクの 1 つがどのように見えるかです

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

私の最初の質問は次のとおりです: この方法でページをハッシュベースの URL にリンクするのは危険ですか?

私の 2 番目の質問は次のとおりです。ホームページのリンクの 1 つをクリックすると、投稿ビューに移動するのに問題はありません。私のURLは次のように正常に変更されhttp://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034、その特定の投稿のビューがレンダリングされます。ただし、その時点でページを更新するかhttp://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034、URL バーに直接入力するthis.collection.get(id)と、ルーターの showPost メソッドのメソッドが を返しますundefined。これが事実である理由を理解するのを手伝ってくれる人はいますか?

初期化メソッドが両方とも呼び出されることを数回確認し、コレクションとモデルが正常に作成されました

4

2 に答える 2

3

#2 については、「post」ルートでコレクションを取得していない可能性が最も高いです。コレクションが存在しない場合は取得してから、render を呼び出します。それでうまくいくはずです!

于 2013-08-05T17:59:40.980 に答える
2

@Trunal は 2 番目の質問の正しい道を進んでいると思います。まず、「危険」ではありません。GET を介してサーバーに情報を渡して情報を取得する、従来のサーバー側アプリの場合と実際には何の違いもありません。backbone.history.navigate私の意見では、これはルートを実装するための推奨されるアプローチです (そうしないと発生する可能性のあるあらゆる種類のセットアップとイベントの問題を回避するため、手動でトリガーしようとするよりも)。

于 2013-08-05T18:21:22.047 に答える