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属性like时,结果的链接是.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

您不能直接在 HTML 中定义此动态 URL,您必须将它们创建到您的视图中。

例如:

模板:

<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 回答