0

我在 durandal 中创建了一个视图来显示产品列表。

我希望能够搜索这些产品,这就是为什么我想在侧边栏中添加一个仅针对此产品视图显示的搜索表单。

侧边栏必须在产品视图之外声明,这样每当我更改搜索表单中的过滤器时它就不会刷新。意味着,我需要一个外部侧边栏来刷新视图,并且仅在激活该视图时才会出现。

我不知道如何开始实施它以及最好的方法是什么。帮助会很棒。

4

1 回答 1

0

您可以在此处采用几种不错的方法,但最佳选择取决于您如何为搜索表单分配侧边栏区域。

这取决于您希望产品视图模型和搜索表单的耦合程度。

共享相同的视图模型(或其中的一部分):如果您可以在两个视图模型之间共享相同的 KnockOut 可观察对象,那么其余的几乎都是“一切照旧”。您可以通过在产品视图模型和搜索表单视图模型之间共享一个 ko.observable 来实现这一点。这可以通过以下方式之一完成:

  • 共享一个共同的视图模型基础(这里有一些信息:使用 Durandal 时的视图模型继承
  • 创建产品 VM 和搜索 VM 都需要的单独模块
  • 设置 Durandal 组合,使它们都使用字面上相同的视图模型。但是,这不是很直观,因此我不建议这样做。

一旦你有一个可用的共享模型,你可以从两个视图绑定到它,并且 KnockOut 的可观察性应该能够提供你需要的所有反馈。

一种更松散耦合的方法是使用 pub/sub 技术。这使得模块非常独立,但有相关的管理和维护后果,就像使用全局变量时一样。我只会在有必要使视图模型尽可能彼此隔离时,或者当后勤系统不允许视图模型相互了解时才建议这样做。

在发布/订阅场景中,搜索 VM 仅发布产品 VM 列出的事件,反之亦然。有许多提供此功能的 JS 库。它甚至作为 Durandal 的一部分包含在其中 - 以下是一些相关信息: Durandal:利用发布和订阅 同时查看Durandal 事件参考

于 2013-04-07T19:11:12.340 回答