我有一段数据(对象)从服务器端脚本打印为全局变量。
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变量。但我似乎并非如此。
答案 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}}