【问题标题】:Ember.js Router v2 dynamic slug is nullEmber.js 路由器 v2 动态 slug 为空
【发布时间】:2013-01-15 19:40:05
【问题描述】:

在以下示例中,使用新的 Router v2 API,ember 应用程序的行为与预期相同,但有一个异常。 当悬停在动态创建的链接上时,使用已注册的#linkTo Handlebars 助手,用户的 id 在 url 中为空。

单击链接会转换到正确的状态,但 url 仍然是“null”。

什么给了?我缺少一个简单的约定吗?

App = Ember.Application.create({
  autoinit: false,
  rootElement: "body"
});

App.Store = DS.Store.extend({
  revision: 11, 
  adapter: DS.RESTAdapter.create({})
});

App.User = DS.Model.extend({
  email: DS.attr('string'),
  username: DS.attr('string')
});

App.ApplicationView = Ember.View.extend({
  templateName: 'application'
});

App.ApplicationController = Ember.Controller.extend();

App.HomeController = Ember.Controller.extend({
});

App.UserController = Ember.ObjectController.extend({
});

App.Router.map(function(match) {
  match("/").to("home");
  match("/users/:user_id").to("user");    
});

App.HomeRoute = Ember.Route.extend({
  setupController: function(controller) {
    controller.set('users', App.User.find());
  }
});

App.UserRoute = Ember.Route.extend({
  setupControllers: function(controller, user) {
    controller.set('content', user);
  }
});

App.initialize();

<script type="text/x-handlebars" data-template-name="home">

    {{#if users.isLoaded}}

      {{#each item in users}}
          <div class="user">
            {{item.email}}
          </div>

          <div class="user">
            {{#linkTo user item}}
              {{item.username}}
            {{/linkTo}}
          </div>

      {{/each}}

    {{else}}
      <p class="loading">Loading Users</p>
    {{/if}}

</script>   

<script type="text/x-handlebars" data-template-name="user">

    <div class="user">
      <h3>{{username}}</h3>
      <p class="email">{{email}}</p>
    </div>

</script>

【问题讨论】:

    标签: ruby-on-rails ember.js handlebars.js


    【解决方案1】:

    我用你的代码创建了一个小提琴,它似乎工作正常:JS Fiddle Example

    我假设 API 返回的模型类似于我定义 App.User.FIXTURES 的方式。如果不正确,请告诉我。

    我正在使用 EmberJS 版本:v1.0.0-pre.2-291-g4785901,最后一次提交:4785901 (2013-01-05 18:57:16 +0100),你可以找到它here。试试看这个版本的 Ember 是否能解决你的问题。

    另外,为了您的信息,他们最近再次更新了 EmberJS 路由,并且路由器中的匹配不再有效。您可以在此处查看新格式:EmberJS.com Defining Your Routes。我的“进行中”Ember-JS-Example 与您的路由相似,但已更新,如果您愿意,可以将其用作示例。新样式,来自 EmberJS.com:

    App.Router.map(function() {
      this.route("about", { path: "/about" });
      this.route("favorites", { path: "/favs" });
    });
    

    【讨论】:

    • 在第二行添加了一个关于 api 的注释,如果我有一个不正确的假设,应该解决这个问题。
    • 是的,我明白了。使用您的固定装置说明了这个问题。我的 Node/Express 应用程序返回带有 _id 但不是 id 的 json。应该很容易修复。谢谢!
    【解决方案2】:

    其实这可能是对原问题最完整的回答:

    App.Store = DS.Store.extend({
      revision: 11, 
      adapter: DS.RESTAdapter.create({
        serializer: DS.JSONSerializer.create({
          primaryKey: function(type) {
            return '_id';
          }
        })
      })
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多