我在一个淘汰赛ViewModel中有一个由AJAX调用填充的项数组,它会显示网页上每个项目的几个数据字段。
现在我需要让用户点击一个项目,其中填充了从前一个AJAX请求收到的数据的侧栏(一些字段加上更多)。
我认为通常会选择 id 并执行 item 特定的AJAX请求,通过Sammy.js进行路由,但我们不需要。
我是淘汰赛的新手;我想要的最好的策略是让各个div显示一个ViewModel来显示数据,但是如何让ViewModel在它们之间传递数据呢?这是禁忌吗?
这是深入分析功能的一个示例,我已经阅读了大量有关此问题的StackOverflow Q& A但找不到我可以使用的东西。我已经按照John Papa的PluralSight教程进入了这个阶段。
答案 0 :(得分:6)
您可能想要使用Amplify的消息传递或@RPNiemeyer上面提到的库来使用pub / sub模型。两者都很棒。
然而,听起来您只是想从服务器获取数据,然后在多个视图模型中使用该数据。甚至可能在多个视图模型中共享一些数据。我的SPA教程中的datacontext概念允许您在datacontext中托管数据并从其他视图模型中引用它。
您还可以使用像Breeze这样的库来帮助实现这一目标(Breeze会替换我的SPA中的datacontext ......并且会更好,因为我将在即将开始的课程中展示。)
这些只是几个选项
答案 1 :(得分:1)
您可能还想查看breeze文档中“Cool Breezes”下的“Share an EntityManager”帖子。
共享单个EntityManager可能就是您所需要的。但如果您认为自己需要多个,请阅读“Multiple managers”。
答案 2 :(得分:0)
正如评论中所提到的,最好的选择是使用knockout-postbox
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)
答案 3 :(得分:0)
IMO最简单的方法是简单地将带有可观察数据的“params”传递给侧边栏组件。 http://knockoutjs.com/documentation/component-custom-elements.html#passing-observable-expressions