【发布时间】:2017-03-17 11:49:08
【问题描述】:
目标是能够更新 SharedParent 和/或 SharedState 视图中的“标题”,无论何时通过 DI 从子级更改它。
我怀疑 Aurelia 路由器自定义元素上的 layout-view 和 layout-view-model 存在问题。
我需要这个,因为真实代码中的 SharedParent 将抽象通用计算函数(保存在 SharedParent 中的变量中,当前未在视图中更新)等孩子将调用(以避免每个孩子复制此功能)。理想情况下是引用 SharedParent 的 DI 引用。
理想的解决方案可以直接修改父级。 SharedState 只是一种额外的测试方式,可以忽略,如果你能找到一种让它与选项 1 一起工作的方法)
选项 1 是我开始工作的最高优先级
在此处查看实时运行要点:https://gist.run/?id=66eeff540a4665694a31482b790bf01e
更新
我已经提出了另一个要点,以展示我尝试过的另一种方式以使父/子关系正常工作:https://gist.run/?id=080d4ac3f4d8677d344140a7827aea94 - 在此示例中,当前路线设置不正确只是另一个问题,原因是在路由器中复制“路由”属性。但是在这里,至少我们能够从子级更新父级属性。理想的解决方案是让两者都在一个解决方案中工作。以便正确设置活动路由,并且子级将能够更新依赖注入父级的属性。最后,父视图需要刷新此更改。顺便说一句,这个要点来自另一个问题:How to dynamically build navigation menu from routes linking to parent/child views/controllers - 但稍作修改以帮助说明在这个问题的要点中不起作用的东西确实在这里起作用。
总结一下。
我首先尝试以这种方式解决我的问题:https://gist.run/?id=080d4ac3f4d8677d344140a7827aea94 - 几乎所有事情都按原样工作(从子视图中设置父级标题)并在子视图中反映父级的日期/语言更改 - 获取和设置子级的父级属性。唯一不起作用的是路由。我无法显示活动路线,因为多条路线共享相同的“路线”属性。
所以我查看了 layout-view(-model) 解决方案(我在这个问题中提出了这个解决方案) - 这似乎解决了路由问题,但破坏了父/子之间的绑定。
【问题讨论】:
-
您是否考虑过使用事件聚合器而不是将您的类注入到子组件中?
-
因为我需要两者 1) 从父级获取属性 2) 修改父级属性 - 从子级,我认为这样做最不混乱的方法必须是将父级注入子级。我试过使用信号,但问题是当孩子修改父属性时,父视图不会“重新渲染”/更新。至少不适用于“布局视图(-模型方法)。有趣的是,它适用于我在“更新”下给出的另一个示例。我看不出事件聚合器在这方面有何帮助,但感谢你的建议。:-)
-
你能帮我澄清一件事吗?父母还有什么孩子需要你注射的东西?我的意思是,除了要更新的标题属性之外?子组件是否需要(或将来需要)父组件?
-
在每个父级中计算了很多统计数据。现在,计算这些统计信息、计算进度和显示进度的函数在父级中定义。孩子通过引用注入的 parent.functionname(params,..,) 来调用这些函数。我曾经为每个子级定义了相同的功能,但我将其移至父级以减少重复代码。我可以从父级读取很好,但似乎 layout-view/layout-view-model 会导致问题,因此您无法从其子级更新 layout-view-model 和视图:/
-
我刚刚注意到,如果我删除 NewInstance.of,我可以让 2 工作。但它确实是 1) 我希望以某种方式开始工作。
标签: aurelia