目标是能够更新"标题"在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 - 在这个例子中,只是另一个问题由于重复的"路线"当前路线未正确设置路由器中的属性。但在这里,至少我们能够从孩子们那里更新父母属性。理想的解决方案是同时使用1个解决方案。这样就可以正确设置活动路径,并且子级将能够更新依赖注入的父级属性。最后,父视图需要刷新此更改。这个要点来自另一个问题:How to dynamically build navigation menu from routes linking to parent/child views/controllers - 但稍作修改以帮助说明在这个问题中没有做什么'要点,确实在这里工作。
总结一下。
我首先尝试用这种方式来解决我的问题:https://gist.run/?id=080d4ac3f4d8677d344140a7827aea94 - 几乎所有事情都应该工作(在孩子的父母中设置标题)并在子视图中反映父母的日期/语言的变化 - 从子项设置父属性。唯一不起作用的是路由。我无法显示活动路线,因为多条路线共享相同的路线"属性。
所以我看了一下layout-view(-model)解决方案(我在这个问题中提出了这个问题) - 这似乎解决了路由问题,但打破了父/子之间的绑定。
答案 0 :(得分:3)
我让它在这里工作: https://gist.run/?id=6c112829bb42a5ed86b78b4c8917a72c
@singleton(true)
=>上设置SharedParent
装饰器DI Basics 答案 1 :(得分:1)
ChildA
由容器构造,然后构建路径视图中指示的布局视图和布局视图模型。这意味着容器必须创建SharedParent
的新实例(让我们称之为"实例1")以提供给ChildA
的构造函数。
稍后,构建路由器视图的布局视图模型(SharedParent)。当容器构造自定义属性,自定义元素和路由器视图模型时,模板系统的默认行为是告诉容器&#34;给我一个新的实例,不要重用现有的&#34;# 34 ;.这很有道理,大多数时候你不希望表单上出现的所有10 <my-number-input>
都是同一个实例,而不是你想要的10个标准html {{1你的表单上的元素是相同的...你希望它们是独立的。因此构建了<input>
的第二个实例,这就是为什么您的标头代码无效... SharedParent
具有与路由器视图不同的ChildA
实例。
在SharedParent
上使用@singleton
可解决此问题,但更好的方法是让SharedParent
,SharedParent
和ChildA
依赖ChildB
1}} class(例如SharedState
)。这将消除覆盖默认行为的需要,使得更清楚共享依赖关系是什么,并保持@inject(SharedState)
和SharedParent
之间关注点的良好分离。
ChildA
这是一个例子:https://gist.run/?id=dfe291e3da67854d143d264a2edd5ade