【问题标题】:How to force Aurelia to destroy/recreate a view/viewModel pair without using router如何在不使用路由器的情况下强制 Aurelia 销毁/重新创建视图/视图模型对
【发布时间】:2016-09-14 22:02:10
【问题描述】:

从 Aurelia 开始时,if.bind 不会导致子视图/视图模型被破坏,这让我感到惊讶。它确实经历了绑定/取消绑定附加/分离循环,我可以看到这在某些情况下是如何有意义的。但我也希望能够完全破坏视图/视图模型并从头开始重新创建它。我创建了一个plunker,展示了我使用if.bind 所做的最大努力。我正在寻找有关如何完全销毁 的建议。谢谢!

【问题讨论】:

    标签: aurelia aurelia-templating


    【解决方案1】:

    看起来您可以使用<compose> 元素将自定义元素视为视图/视图模型,从而使用瞬态创建行为。 See compose documentation

    plunker: https://plnkr.co/edit/vKsQsHKsIp4vTVjG5G7f?p=preview

    <template if.bind="someBoolean">
      <compose view-model="my-other-element.js"></compose>
    </template>
    

    【讨论】:

    • 这比我第一次使用repeat.for 更好。我仍然认为这是一种 hack,因为我相信 compose 适用于可能使用不同类型视图模型的情况。还有 Jeremy Danyow recommends 尽可能使用自定义元素而不是 Compose。另外值得注意的是@transient 在这种情况下没有任何区别,视图/视图模型无论如何都被视为瞬态。也许这种情况需要 github 问题?
    • 正确 - 我只是没有清理瞬态装饰器,但它并不真正适用于此。在这种情况下,瞬态是默认行为。您可以使用@singleton() 指示路由器重用该实例。
    • 我很确定自定义元素无法使用单例视图模型。因此,多个元素将拥有各自构建的视图模型。但这种情况有点不同 - 模板引擎似乎挂在元素引用上并将其添加回来,而不是从头开始创建它。一个 github 问题可能会引发一些关于这种行为的讨论。
    • 你是对的。 Compose 基本上是目前完成此任务的唯一方法。 github.com/aurelia/framework/issues/602 感谢您抽出宝贵时间研究!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多