[英]How to nest components in a proper way
I'm starting with EMBER.js, and there are some doubts that I have: 我从EMBER.js开始,我对此有些怀疑:
Let's say that I am creating a simple chat, just for the example. 举例来说,假设我正在创建一个简单的聊天室。 I have a left-side panel with a list of users, and a right-side panel with the messages sent.
我有一个带有用户列表的左侧面板,和一个带有已发送消息的右侧面板。
I considered creating a component called: users-list
, that displays a list of users. 我考虑过创建一个名为:
users-list
的组件 ,该组件显示用户列表。 Every member of that list should be another component called user
. 该列表的每个成员都应该是另一个名为
user
组件 。
This means that a user
component is responsible of drawing itself, with the user name, last sent message, name color, etc... (all are properties) and also has some actions in buttons beside its name: changeName, changeColor, leaveRoom. 这意味着
user
组件负责绘制自身,包括用户名,上次发送的消息,名称颜色等(均为属性),并且在其名称旁边的按钮中还有一些操作:changeName,changeColor,leaveRoom。
While a users-list
is responsible for maintaining a list of users and displaying them using the user
component. users-list
负责维护用户列表并使用user
组件显示它们。
So the questions here are: 所以这里的问题是:
users-list
component, from an action inside of the child user
component ( leaveRoom
action)? user
组件内部的user
( leaveRoom
操作)从users-list
组件中删除项目?
- Is this the proper way to go?
这是正确的方法吗?
Yes, it is. 是的。 But you have to use hyphen in component name, so
user
component should become something like this: user-component
. 但是您必须在组件名称中使用连字符,因此
user
组件应变为以下形式: user-component
。
If it is: How can I delete an item from the users-list component, from an action inside of the child user component (leaveRoom action)?
如果是:如何从子用户组件内部的操作(leaveRoom操作)中的用户列表组件中删除项目?
See WORKING DEMO . 请参阅工作演示 。
In users-list
template pass an action (defined in users-list
) to user-component
: 在
users-list
模板中,将操作(在users-list
定义)传递给user-component
:
{{#each model as |user|}}
{{user-component model=user leaveRoom=(action 'leaveRoom')}}
{{/each}}
Action leaveRoom
in users-list
: 在
users-list
操作leaveRoom
:
actions: {
leaveRoom(user) {
alert('User-list: user ' + user.name + ' wants to leave room.');
}
}
Then, we have simple user-component
template with button that fires an action leaveRoom
of user-component
: 然后,我们有一个简单的带有按钮的
user-component
模板,该模板会触发一个user-component
的动作leaveRoom
:
{{model.name}} - <button {{action 'leaveRoom' model}}>Leave room</button>
Action leaveRoom
in user-component
calls action passed to component from users-list
. user-component
动作leaveRoom
调用从users-list
传递给组件的动作。 So, leaveRoom
in user-component
looks like this: 因此,
user-component
leaveRoom
如下所示:
actions: {
leaveRoom(user) {
this.get('leaveRoom')(user);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.