4

我有一个由敲除 ViewModel 中的 AJAX 调用填充的项目数组,它显示网页上每个项目的几个数据字段。

现在我需要使用户能够单击一个项目来填充侧栏,其中包含从先前的 AJAX 请求(一些字段加上更多)接收到的数据。

我想通常一个人会接受一个id并执行一个特定于项目的 AJAX 请求,通过 Sammy.js 路由它,但我们不需要这样做。

我是淘汰赛新手;我想最好的策略是为各种 div 设置一个 ViewModel 来显示数据,但是如何让 ViewModel 在它们之间传递数据呢?这是禁忌吗?

  • 通过窗口对象引用另一个窗口?
  • 使用with:关键字?它不断出现,但我看不出如何在这种情况下应用它。
  • 也许通过 Sammy.js,并在Amplify中缓存数据?

这是一个向下钻取功能的示例,我已经阅读了许多关于此的 StackOverflow 问答,但找不到我可以使用的东西。通过遵循 John Papa 的 PluralSight 教程,我已经达到了这个阶段。

4

4 回答 4

6

您可能想要使用 Amplify 的消息传递或 @RPNiemeyer 上面提到的库的 pub/sub 模型。两者都很棒。

但是,听起来您只想从服务器获取数据,然后在多个视图模型中使用该数据。甚至可能在多个视图模型中共享其中的一些数据。我的 SPA 教程中的 datacontext 概念允许您在 datacontext 中托管数据并从其他视图模型中引用它。

您还可以使用 Breeze 之类的库来帮助执行此操作(Breeze 将替换我的 SPA 中的数据上下文......并且会做得更好,正如我将在即将到来的课程中展示的那样)。

这些只是几个选项

于 2012-11-21T04:49:08.813 回答
1

您可能还想查看微风文档中“Cool Breezes”下的“ Share an EntityManager ”帖子。

共享单个 EntityManager 可能就是您所需要的。但是,如果您认为您需要多个管理器,请阅读“多个管理器”。

于 2012-11-27T20:21:03.913 回答
1

IMO 最简单的方法是简单地将带有可观察数据的“参数”传递给您的侧边栏组件。 http://knockoutjs.com/documentation/component-custom-elements.html#passing-observable-expressions

于 2015-10-12T13:09:29.100 回答
0

正如评论中提到的,不错的选择是使用淘汰赛邮箱

knockout-postbox 是一个 Knockout.js 插件,旨在使用 Knockout 的基本发布/订阅功能来促进不同视图模型/组件之间的解耦通信。

这使您可以设置简单的基于主题的通信,例如:

var ViewModelOne = function() {
  this.isEditable = ko.observable();  
};

var ViewModelTwo = function() {
  this.editable = ko.observable(false);  
};

var one = new ViewModelOne();
var two = new ViewModelTwo();

var editableTopic = "myEditableTopic";
one.isEditable.subscribeTo(editableTopic);
two.editable.publishOn(editableTopic)
于 2014-08-13T11:44:37.213 回答