如何在不显式命名父组件属性的情况下将其传递给子组件?

时间:2018-12-25 12:57:33

标签: ember.js

我们假设有一个父组件A,它有一个子组件B,而子组件B又有一个子子组件C。

> POST /api_jsonrpc.php HTTP/1.0
> User-Agent: curl/7.29.0
> Host: XXXXXX:1080
> Content-Type: application/json;charset=utf-8
> Accept: application/json, text/plain, */*
> Content-Length: 224
>
} [data not shown]
* upload completely sent off: 224 out of 224 bytes
100   224    0     0  100   224      0    223  0:00:01  0:00:01 --:--:--   223< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 25 Dec 2018 15:21:07 GMT
< Content-Type: application/json
< Connection: close
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Headers: Content-Type
< Access-Control-Allow-Methods: POST
< Access-Control-Max-Age: 1000
<
{ [data not shown]
100 86840    0 86616  100   224  77583    200  0:00:01  0:00:01 --:--:-- 77612
* Closing connection 0

模板C将列出发送给它的所有参数。参数没有固定的长度或名称。

我的目标是(从B接收)从A接收参数并将其全部发送到C。我如何获取参数列表并将其发送给与A保持原样绑定的孩子?

1 个答案:

答案 0 :(得分:0)

我不确定您是否会将此作为答案;但是当遇到您这样的要求时,我只会将参数传递给组件C。这只能通过屈服来实现。所以;我建议的是不要在C中渲染B,而不要在yield中渲染C A。这是我的意思的摘要:

{{!-- Template for B --}}
{{yield (hash c=(component 'C-component'))}}

{{!-- Template for A --}}
{{#B-component as |b|}}
    {{b.c param1=param1 param2=param2}}
{{/B-component}}

乍一看似乎很奇怪;但是,这是Ember上下文关联的优点。如果B对传递给它的参数不执行任何操作,而只是将它们传递给C;为什么首先B使用这些参数并破坏其API。它根本不需要那些参数。因此,应该将它们直接传递给C,这要归功于yield。