我正在使用 KnockoutJS 创建一个用于飞行的简单重量和平衡应用程序。这涉及计算手臂(moment / weight)
和力矩(weight * arm)
。如您所见,手臂取决于力矩,反之亦然。我遇到的问题是当用户更新时刻或手臂时,我得到一个无限循环,我需要打破它。
这是我的代码:
function weightAndBalance(_arm)
{
var self = this;
this.weight = ko.observable(0);
this.arm = ko.computed(function()
{
if(parseFloat(self.weight()) == 0)
{
return _arm;
}
console.log("Arm: " + parseFloat(self.moment()) / parseFloat(self.weight()));
return parseFloat(self.moment()) / parseFloat(self.weight());
});
this.moment = ko.computed(function()
{
console.log("Moment: " + parseFloat(self.weight()) * parseFloat(self.arm()));
return parseFloat(self.weight()) * parseFloat(self.arm());
});
}
ko.applyBindings(new weightAndBalance(80.1));
我的标记:
<table>
<tr>
<th>Item</th>
<th>Weight</th>
<th>Arm</th>
<th>Moment</th>
</tr>
<tr>
<td>Front Passengers</td>
<td><input type="text" data-bind="value: weight" /></td>
<td><input type="text" data-bind="value: arm" /></td>
<td><input type="text" data-bind="value: moment" /></td>
</tr>
</table>
用户应该输入一个权重,并且应该填充矩字段。在手动输入力矩字段的情况下,应该自动重新计算手臂。
我准备了Fiddle 形式的现场演示。