[英]knockout.js observable groups/computed groups
我目前有一个比较复杂的数据模型可以使用。 我有一组动态创建的computed observables
,它们必须订阅一组动态创建的observables
(即,如果这些observables
任何一个发生更改,则整个computed
必须刷新)。
我挠头试图解决这个问题。 我想到的唯一淘汰赛解决方案是使一个observable group
和一个computed group
(扩展各个observable
)。 computed group
可以订阅一个observable
,并且它将observables
事件传递给它包含的computeds
。 同样, observable
observable group
包含的一个observable group
会将其事件发送给父对象,后者将其事件传递给其订阅者。
老实说,我认为这不是一个好主意,但似乎可行。
目前有没有办法做到这一点?
例如,假设我有一个动态数量的“投资者”,并附有动态数量的“优先级”,还有一个动态数量的“用户”,它们计算出他们出现在任何投资者优先级中的次数,所以我们有类似这个:
上图代表用户,以及他们出现在投资者列表中的次数。 这些将是计算得到的可观测值。
上图代表投资者。 这些是已订阅的观察值。
创建这些字段还有一些额外的信息,因此很多字段都是这样创建的(这既适用于计算型观测值,也适用于普通可观测值):
这是投资者行后面的加价。
<!-- ko foreach: new Array($root.MaxPriority()) -->
<td>
<select data-bind="options: $root.Users,
optionsText: 'FirstAndLastName',
optionsValue: 'UserID',
value: $root.getUserAtPosition($parent.InvestorID, $index() + 1)
"></select>
</td>
<!-- /ko -->
这是为用户创建可观察项的功能(在选择框上)。
self.getUserAtPosition = function (invId, pos) {
var uniqueSelectInst = ko.observable(function () {
return 0;
});
return uniqueSelectInst;
};
这是在左侧创建用户的标记。
<!-- ko foreach: Users.slice(1) -->
<tr>
<td data-bind="text: FirstAndLastName"></td>
<td><input type="checkbox" /></td>
<td data-bind="text: $parent.countAppearancesForUser"></td>
</tr>
<!-- /ko -->
这是对应的JS。
self.countAppearancesForUser = function (priority) {
return ko.computed(function () {
//code
});
};
以小提琴形式: http : //jsfiddle.net/8U9M4/3/
我不知道这种方法有多好,而且我愿意接受任何会使其变得更好的方法。
只是关闭,我想补充一点,我解决了这个使用虚拟computables,因为看到这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.