2

backbone.js でルーター機能を使用していますが、この問題に遭遇しました。これは些細なことかもしれませんが、これを理解したり、Googleで何かを見つけたりすることはできません。

問題:ページhttp://www.mydomain.com/user/1にリンクがあります。このリンクは にリンクする必要がありhttp://www.mydomain.com/user/1/profileます。

もちろん、使用する<a href="1/profile">と探しているものが得られます1が、動的に生成された値です。では、ルーターはどのようにルートを定義する必要がありますか? 1番号をルートにハードコードするのは賢明な選択ではないと思います。

//Router

var AppRouter = Backbone.Router.extend({

    routes: {
        '': 'profile',
        'profile': 'profile'
    },

    profile: function() {

    }
});

var app = new AppRouter();
Backbone.history.start();

のようなタグのhref属性を設定すると、結果のリンクは になります。a<a href="profile">http://www.mydomain.com/user/profile

<a href="./profile">私が得るためにhttp://www.mydomain.com/user/profile

<a href="/profile">私が得るためにhttp://www.mydomain.com/profile

<a href="profile/">私が得るためにhttp://www.mydomain.com/profile/

不足しているのはなぜ1ですか? また、目的を達成するためにそれを保持するにはどうすればよいですか?

4

2 に答える 2

5

この動的URLをHTMLで直接定義することはできません。ビューに作成する必要があります。

例えば:

レンプレート:

<script type="text/template" id="template-element">
  <h1><%= title %></h1>
  <a class="profile" href="<%= url_profile %>">profile</a>
</script>

jsコード:

// code simplified and no tested
var Element = Backbone.Model.extend({
  initialize: function(){
    this.set( "url_profile", this.url() + "/profile" );
  }
});

var ElementView = Backbone.View.extend({
  template: _.template( $("#template-element").html() ),

  render: function(){
    this.$el.html( this.template( this.model.toJSON() ) );
    return this;
  }
});

または、私が邪魔をしているときに時々するように:

レンプレート:

<script type="text/template" id="template-element">
  <h1><%= title %></h1>
  <a class="profile" href="#replace_with_real_url">profile</a>
</script>

jsコード:

// no Element.url_profile attribute needed:
var ElementView = Backbone.View.extend({
  template: _.template( $("#template-element").html() ),

  render: function(){
    this.$el.html( this.template( this.model.toJSON() ) );
    this.$el.find( ".profile" ).attr( "href", "/user/" + this.model.id + "/profile" );
    return this;
  }
});
于 2012-07-28T19:07:13.803 に答える
-1

http://backbonejs.org/#Routerでわかるように、ルートでパラメータを使用できます。'/user/:id/profile'

于 2012-07-28T16:27:36.890 に答える