我正在使用MVVM模式,breeze.js和knockout.js的MVC Web应用程序。 这是我第一次使用这些JS库和我还是有把握,他们是如何工作的。
一个应用程序的页面中有其中两个列和行都是动态生成的网格。 我需要,其中对于每个行我有总在以下行单元显示的值增加一个额外的列。 下面的例子:
Data type | Comment | Fact 1 | Fact 2 | Total | Value 1 | Value 2 | Value 3 | Value 4
==============================================================================================
Item 1 | any comment | fact 1 | fact 2 | calc. sum | 10 | 20 | 30 | 40
该网格由结合微风实体对象(planningItems)到模板生成。 对象具有的属性DataTypeId,评论,会员,道达尔,FactValues。 道达尔是计算的总和。
<script type="text/html" id="list-planning-template">
<tr data-bind="mouseOverButton: $data">
<td style="text-align: center">
<button class="actionbutton actionbutton-item" data-bind="selectItem: $root.selectedItems, itemId: FactId"></button>
</td>
<td data-bind="text: DataTypeId" />
<td data-bind="text: Comment().Text" />
<!-- ko foreach: FactMembers -->
<td data-bind="text: Member().Code"></td>
<!-- /ko -->
<td data-bind="text: Total" />
<!-- ko foreach: FactValues -->
<td style="width: 50px" data-bind="text: Value"></td>
<!-- /ko -->
</tr>
我一直在试图通过扩展下列方式微风实体对象添加的总资产:
var FactCtor = function () {
this.Total = ko.computed({
read: function () {
var sum = 0;
if (this.FactValues) {
this.FactValues().forEach(function (fv) {
sum += fv.Value();
});
}
return sum;
},
deferEvaluation: true
}, this);
};
manager.metadataStore.registerEntityTypeCtor("Fact", FactCtor);
从本质上讲,这是什么代码是应该做的是加入了淘汰赛计算观察到的命名与总递延评估延长实体。 通过观察到的微风阵列FactValues函数迭代,并增加了的值。 我一直在摆弄不同版本的代码都无济于事。 任何人都可以给我什么是错的这个代码的提示?