【问题标题】:Override Durandal's display:none behavior in Compose binding在 Compose 绑定中覆盖 Durandal 的 display:none 行为
【发布时间】:2014-06-11 10:24:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: durandal


    【解决方案1】:

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

    在你的情况下,如果你在你的视图组成之后执行你的绑定会更好

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

    composition.addBindingHandler('yourBindingName');
    

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

    【讨论】:

    【解决方案2】:

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

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

    另一个想法是使用只实现init 函数的自定义绑定。在这个函数中,你可以设置视图的属性。

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2016-04-05
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多