ember.js - 如何修改模板中的对象哈希值?
问题描述
如何在组件使用对象settings.color
之前声明使用把手语法或 Ember.js 助手的新值?settings
bar
例如。
foo-component.js
settings: { color: "blue", size: 16, ...many others }
foo-template.hbs
{{yield settings=settings}}
my-route.hbs
{{#foo as |settings|}}
#! How to change `settings.color` to "red" here before passing to bar ? !#
{{bar settings=settings}}
{{/foo}}
例如。在哈希场景中
foo-template.hbs
{{yield settings=(hash color=color size=size)}}
my-route.hbs
{{#foo color="blue" size=16 as |settings|}}
#! How to change `settings.color` to "red" here before passing to bar ? !#
{{bar settings=settings}}
{{/foo}}
解决方案
我不知道你为什么需要这个,但如果你需要这个,你可以通过多种方式实现:
- 您可以公开所有参数并构建新的设置对象:
{{#foo color="blue" size=16 as |settings|}}
{{bar settings=(hash size=settings.size x=settings.x y=settings.y color="red")}}
{{/foo}}
这是最明确的方式,但是当您将新项目添加/删除到设置哈希时它很脆弱。
- 您可以创建一个助手来覆盖参数:
{{#foo color="blue" size=16 as |settings|}}
{{bar settings=(override settings color="red")}}
{{/foo}}
在覆盖助手中,您需要执行以下操作:
export function override(params, hash) {
const obj = params[0]
setProperties(obj, hash)
return obj
}
export default buildHelper(override)
但这也会更新hash
上层组件的产量。如果你有 bar 组件的兄弟,它们也将使用red
. 因此,您可以考虑创建它的浅表副本。像这样:
export function override(params, hash) {
const obj = params[0]
return Object.assign({}, obj, hash)
}
这样会更安全。
推荐阅读
- python - 在循环python中创建多个空文件
- javascript - 在javascript中单击时循环数组
- python - 使用 pip install 安装 matplotlib 时出错
- node.js - 本机库绑定文件 - 路径不正确
- java - Android Studio 井字游戏
- oracle - 现有 Oracle RDS 数据库的逆向工程 CLI
- java - 多线程模式下的快速文件处理
- amazon-web-services - 无法连接到 EC2 实例
- asp.net-core - 在 asp.net core razor 页面中使用带有部分视图的 DI
- android - Android 应用程序的数据库控制模型