如何将计算属性从路径传递给组件

Jam*_*ton 2 ember.js

以下面的例子为例:

  <script type="text/x-handlebars">
    <h2>Welcome to Ember.js</h2>

    {{outlet}}
  </script>

  <script type="text/x-handlebars" data-template-name="index">
    <ul>
    {{#each model as |item|}}
      <li>{{item}}</li>
    {{/each}}
    {{magnus-component name=firstName}}
    </ul>
  </script>

  <script type="text/x-handlebars" data-template-name="components/magnus-component">
  <!-- Doesn't appear -->
    {{name}}
  </script>
Run Code Online (Sandbox Code Playgroud)

...和

App = Ember.Application.create();

App.Router.map(function() {
});
App.IndexRoute = Ember.Route.extend({
  model: function() {
    return ['red', 'yellow', 'blue'];
  },
  name: "Magnus",
  surname: "Womble",
  fullName: Ember.computed('name', 'surname', function(){
    return this.get('name') + ' '+this.get('surname');
  })
});
Run Code Online (Sandbox Code Playgroud)

哪个可以在以下jsbin中找到:

http://emberjs.jsbin.com/higako/edit?html,js,output

如何正确地将fullName属性传递给组件模板?

Dan*_*mak 6

你应该将你的逻辑IndexRouteIndexController:

App.IndexController = Ember.Controller.extend({
  name: "Magnus",
  surname: "Womble",
  fullName: Ember.computed('name', 'surname', function(){
    return this.get('name') + ' '+this.get('surname');
  })
});
Run Code Online (Sandbox Code Playgroud)

然后,如果您使用:

{{magnus-component name=fullName}}
Run Code Online (Sandbox Code Playgroud)

而不是(firstName没有在任何地方定义):

{{magnus-component name=firstName}}
Run Code Online (Sandbox Code Playgroud)

它会工作.

工作演示.