0

以下のテンプレートで model.name を指定する必要があるのはなぜですか? コントローラがモデルを装飾しているという印象を受けました。以下のテンプレートで {{ name }} だけを実行できるはずだと思いました。ただし、{{ model.name }} を実行した場合にのみ機能します。

どんな助けでも大歓迎です。ありがとう!

app.js

App = Ember.Application.create({});

App.Router.map(function () {
  this.resource("posts", { path: "/" }, function () {
    this.route("new", { path: "/new" });
    this.route("post", { path: ":post_id" });
  });
  this.route("another", { path: "/another" });
});

App.PostsRoute = Ember.Route.extend({
  model: function(params) {
    return [{ name: "foo" },{ name: "bar" },{ name: "zoo" }]
  }
});

App.PostsPostRoute = Ember.Route.extend({
  model: function(params) {
    console.log('model');
    return Ember.Object.create({ name: "MODEL name" })
  }
});

App.PostsPostController = Ember.Controller.extend({
  selected: false
});

index.html

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Ember Test</title>

</head>
<body>

<script type="text/x-handlebars" id="posts">
  posts here
  {{#each controller}}
  {{name}}
  {{/each}}
  {{ outlet }}
</script>

<script type="text/x-handlebars" id="posts/index">
  posts index here
</script>

<script type="text/x-handlebars" id="posts/new">
  posts new here
</script>

<script type="text/x-handlebars" id="posts/post">
  here is a post???
  {{ model.name }}
  {{ selected }}
</script>

<script src="jquery-1.10.2.js"></script>
<script src="handlebars.js"></script>
<script src="ember.js"></script>
<script src="app.js"></script>
</body>
</html>
4

1 に答える 1

3

PostsPostControllerこれは、あなたが拡張しているために起こります。Ember.Controllerこれを機能させるには、拡張する必要がありますEmber.ObjectController

App.PostsPostController = Ember.ObjectController.extend({
  selected: false
});

ドキュメントでは、これは Ember.ObjectController の定義です:

Ember.ObjectController は、Ember のコントローラー層の一部です。これは、単一のオブジェクトをラップし、未処理の試行を取得して基になるコンテンツ オブジェクトに設定し、未処理のアクションの試行をそのターゲットに転送することを目的としています。

サンプルをこの jsfiddle http://jsfiddle.net/marciojunior/nWTqN/に入れました。見てください。

于 2013-09-14T17:51:18.373 に答える