EmberJS - 如何全局设置所有组件的属性?
EmberJS - How to Globally set an property of all component?
我有一段数据(对象)从服务器端脚本打印为全局变量。
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
});
如何减少这种重复?有没有办法为所有组件设置属性,以便变量可用于 handlebars 表达式?
<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 变量。但是我好像不是这样。
您可以为此目的使用您的应用程序控制器:)
<h1>{{controllers.application.user.name}}</h>
但是您将 need
您的 ApplicationController
在控制器中 :)
另一种方法是制作自定义组件 q 然后像
一样扩展它
App.MyComponent = Ember.Component.extend({
user : user
});
AppFooComponent = App.MyComponent.extend({
//user is gotten from MyComponent
});
使用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}}
我有一段数据(对象)从服务器端脚本打印为全局变量。
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
});
如何减少这种重复?有没有办法为所有组件设置属性,以便变量可用于 handlebars 表达式?
<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 变量。但是我好像不是这样。
您可以为此目的使用您的应用程序控制器:)
<h1>{{controllers.application.user.name}}</h>
但是您将 need
您的 ApplicationController
在控制器中 :)
另一种方法是制作自定义组件 q 然后像
一样扩展它 App.MyComponent = Ember.Component.extend({
user : user
});
AppFooComponent = App.MyComponent.extend({
//user is gotten from MyComponent
});
使用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}}