覆盖Durandal的显示:Compose绑定中没有任何行为

时间:2014-04-25 15:47:08

标签: durandal

我正在使用Durandal的compose绑定,我目前正在遇到一个问题,因为Durandal的compose绑定设置了注入视图的根元素显示:none,直到激活& #39;承诺得到解决。

问题是注入的视图有一个自定义绑定需要知道其绑定元素的初始尺寸,但因为它的父级是display:none,所以该元素的宽度/高度始终为0像素。

解决方案是在合成期间使用visibility:hidden而不是display:none,但我找不到使用compose绑定覆盖该行为的方法。有没有办法在绑定语法中指定它?如果没有,是否可以创建自定义转换以获得所需的行为?

2 个答案:

答案 0 :(得分:2)

覆盖Compose模块的行为实际上并不是一个好主意。

在您的情况下,如果您在构建View后执行绑定会更好

为此,您需要在main.js中的app.start()之后将绑定添加到合成绑定

composition.addBindingHandler('yourBindingName');

在这种情况下,当根元素已经可见并且在视图合成之后,将及时调用绑定。

答案 1 :(得分:1)

我认为没有办法在compose绑定中覆盖此行为。但是,我认为您可以使用自定义绑定或转换来完成此行为。

对于转换,请尝试修改转换,以便根据需要设置视图的visibilitydisplay属性。

另一个想法是使用仅实现init功能的自定义绑定。在此功能中,您可以设置视图的属性。

现在这可能会有效,但我认为无论哪种情况,您都可能必须在准备好显示后清除可见性属性。您可以从attached视图模型函数执行此操作。


另一种可能更清晰的替代方案是考虑将计算逻辑移动到attached视图模型函数,因为此时,durandal已加载并显示视图。如果这是合适的话,你根本不必弄乱visibility属性。