EmberJS - 如何在全局范围内设置所有组件的属性?

时间:2015-01-06 09:45:01

标签: javascript ember.js

我有一段数据(对象)从服务器端脚本打印为全局变量。

user = { id : 1, name: 'foo', avatar : 'http://foo.com/avatar.jpg'}

这条信息需要整个应用程序的各个部分,包括一些组件。

我知道我可以浏览每个组件控制器并设置一个属性来保存用户对象。

App.FooBarComponent = Ember.Component.extend({
    user: user
});


App.AnotherFooComponent = Ember.Component.extend({
    user: user
});

如何减少重复?我有没有办法为所有组件设置属性,以便变量可用于把手表达式

<script type="text/x-handlebars" id="components/foo-bar">
    <h1>{{user.name}}</h1>
</script>

<script type="text/x-handlebars" id="components/another-foo">
    <h1>{{user.name}}</h1>
</script>

我的印象是我应该能够从handlebar表达式访问任何全局js变量。但我似乎并非如此。

2 个答案:

答案 0 :(得分:1)

您可以将应用程序控制器用于此目的:)

 <h1>{{controllers.application.user.name}}</h>

但是,您将need控制器中的ApplicationController:)

另一种方法是创建一个自定义组件qand然后像

那样扩展它
 App.MyComponent = Ember.Component.extend({
      user : user
 });
 AppFooComponent = App.MyComponent.extend({
     //user is gotten from MyComponent
 });

答案 1 :(得分:1)

使用Ember.Application.inject(http://emberjs.com/api/classes/Ember.Application.html#method_inject

var user = Ember.Object.create({
    id : 1,
    name: 'foo', avatar : 'http://foo.com/avatar.jpg'
});
App.register('user:main', user);
App.inject('component', 'user', 'user:main');

然后在您的组件模板中执行

{{user.name}}