所以我意识到这个问题看起来有些模糊,但实际上非常具体。
我开始写这个,然后意识到缺乏具体的措辞使它听起来很模糊。所以让我这样说。
我有一个 Order 对象,上面有客户数据。就本例而言,它还有一个汽车订单。
这辆车有一个类别、产品、年份、颜色。为了这个例子,我的订单页面有 4 个下拉菜单,它们一个接一个。类别填充产品填充年份填充颜色。
(我本来打算使用 Make and Model,然后意识到使用“Model”变得令人困惑,哈哈。)
我有几个问题:
- 我有多层下拉菜单。四个,不只是一个。
- 我的下拉对象之间没有具体的关联——也就是说,我使用类别中的一个 id 来填充产品,但类别在检索时没有与产品一起提供。这与 KO 在其网站上的购物车示例不同。
- 我坚持使用上述架构。我需要更改下拉列表,然后发送服务调用以根据所选下拉列表 ID 获取下一个下拉列表。我无法更改服务层以将对象嵌套在一起。
- 我的订单附带子对象以指示品牌、型号、年份、颜色。但是,由于这些不同,我一直在使用 knockout.mapping 键控数组和自定义绑定处理程序来查找数据对象。谢天谢地,我只需要这样做一次,因为在顶层的对象被替换后,就可以了。
我一直在尝试使用 knockout.mapping 来映射相关对象,特别是考虑到关键的事情。
但是,我完全愿意在淘汰赛中制作对象。
我遇到的问题,这件事真的变成了一场灾难,因为一切都是异步的,除了嵌套在嵌套中的嵌套之外,很难以正确的顺序解决问题。
因此我的问题是——我已经到了完全放弃淘汰赛的地步,这似乎是不对的。感觉就像我非常接近,但它仍然无法正常工作。(通常以错误的顺序加载。)不幸的是,我无法真正发布代码,因为它很大。
问题是,它似乎不应该这么难。感觉就像我错过了淘汰赛和下拉组合的基本设计模式。看看购物车的例子,我开始怀疑多层级联下拉菜单目前在淘汰赛中是不可行的,除非数据全部提前加载。
我真的错过了设计模式吗?如果是这样,请说明。如果没有,请继续说。我想哪个更多的人同意就会被接受。
更新 在收到第一条评论后,我意识到我没有对我尝试过的一些解决方案进行太多讨论。
所以,基本上是的,我已经尝试订阅更改事件。我应该强调,这个问题的核心在于我们所有加载这些下拉列表的调用都是网络调用。
发生的问题是更改事件会触发多次 - 一次是在加载下拉列表时,另一次是在值绑定到下拉列表时。至少,这是我的经验。
最终发生的是任何订阅都会触发多次。当它发生时,它会导致负载发生多次。除了我不想多次触发之外,经常会出现下拉菜单加载不正确的问题。我的猜测是,其中一个时间比其他时间“乱七八糟”。
通过各种努力,我得到了类似的结果。它似乎确实将我推向了一些骇人听闻的东西,例如在彼此的回调中嵌套 5 或 6 或 7 个网络调用。似乎必须有更好的方法。
我已经尝试过计算可观察到类似的效果。我曾尝试通过 MVC viewbag 加载一次,等等。每次我尝试某些东西时,我都会被加载奇怪的东西所阻碍,knockout.mapping 插件的行为很奇怪(它显然不会将其键/映射功能添加到现有的淘汰 observables)或只是......其他一些奇怪的问题。
再次,我问,这是淘汰赛根本无法做到的吗?我们的情况是不是太奇特了?还是我错过了一些可以使所有这些工作的方法、函数或对象?