0

次の例では、新しいRouter v2 APIを使用して、emberアプリケーションは1つの例外を除いて期待どおりに動作します。動的に作成されたリンクにカーソルを合わせると、登録済みの#linkTo Handlebarsヘルパーを使用して、ユーザーのIDがURLでnullになります。

リンクをクリックすると適切な状態に移行しますが、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>
4

2 に答える 2

1

私はあなたのコードでフィドルを作成しました、そしてそれはうまく働いているようです:JSフィドルの例

APIは、私が定義した方法のようなモデルを返すと想定していますApp.User.FIXTURES。それが正しくない場合はお知らせください。

私はEmberJSバージョン:v1.0.0-pre.2-291-g4785901を最後のコミット:4785901(2013-01-05 18:57:16 +0100)で使用していますが、ここで見つけることができます。このバージョンのEmberで問題が解決するかどうかを確認してください。

また、参考までに、最近、EmberJSルーティングが再度更新され、ルーターでの一致が機能しなくなりました。ここで新しい形式を確認できます:EmberJS.comルートの定義。私の「進行中の」Ember-JS-Exampleは、あなたと同様のルーティングを持っていますが、更新されています。必要に応じて、例として使用できます。EmberJS.comからの新しいスタイル:

App.Router.map(function() {
  this.route("about", { path: "/about" });
  this.route("favorites", { path: "/favs" });
});
于 2013-01-15T21:24:21.340 に答える
1

実際、これはおそらく元の質問に対する最も完全な答えです。

App.Store = DS.Store.extend({
  revision: 11, 
  adapter: DS.RESTAdapter.create({
    serializer: DS.JSONSerializer.create({
      primaryKey: function(type) {
        return '_id';
      }
    })
  })
});
于 2013-01-17T21:05:05.217 に答える