【发布时间】:2016-08-21 12:09:15
【问题描述】:
我有三个字段 一、数量 2. 单价 3. 总成本 我正在使用淘汰赛 JS 实时计算总成本。添加新记录时,这可以正常工作。但是,当我编辑记录时,我希望数量和单价在页面首次加载时由它们在数据库中的值预先填充。我已经尝试了下面的代码,它预先填充了数量和单价,但总成本结果没有更新并且现在显示为空白。这是代码
<tr>
<td>
<div class="form-group">
<label asp-for="Quantity" class="col-md-2 control-label"></label>
<div class="col-md-10">
<kendo-numerictextbox name="Quantity" min="0" enable="true" data-bind="value: Quant">
</kendo-numerictextbox>
<span asp-validation-for="Quantity" class="text-danger"/>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label asp-for="UnitPrice" class="col-md-2 control-label"></label>
<div class="col-md-10">
<kendo-numerictextbox name="UnitPrice" min="0" enable="true" data-bind="value: UPrice">
</kendo-numerictextbox>
<span asp-validation-for="UnitPrice" class="text-danger"/>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="form-group">
<label asp-for="TotalCost" class="col-md-2 control-label"></label>
<div class="col-md-10">
<span data-bind="text: TotalCost"> </span>
</div>
</div>
<script>
var someJSON = $.getJSON("/Expenses/EditUSExpense", function(data) {});
var parsed = JSON.parse(someJSON);
// Update view model properties
var quantity = parsed.Quantity;
var unitprice = parsed.UnitPrice;
var ViewModel = function(quantity, unitPrice, Quantity, UnitPrice) {
this.Quant = ko.observable(quantity);
this.UPrice = ko.observable(unitPrice);
this.TotalCost = ko.pureComputed(function() {
if (isNaN(this.Quant() * this.UPrice())) {
return 0;
}
return this.Quant() * this.UPrice();
}, this);
};
ko.applyBindings(ViewModel);
</script>
</td>
</tr>
更新 我已根据以下建议修改了我的代码,并且似乎从数据库中干净地提取了 Quantity 和 UnitPrice,但计算字段 TotalCost 仍显示为 null,并且当我更改其他两个参数时,该值不会改变。这是我修改后的代码,所以有人可以看看。我正在使用相同的剃须刀代码,只是更改了 javascript。 $.getJSON("/Expenses/EditUSExpense", function (data) { var parsed = JSON.parse(data);
// Update view model properties
var quantity = parsed.Quantity;
var unitprice = parsed.UnitPrice;
var ViewModel = function (quantity, unitPrice) {
this.Quant = ko.observable(quantity);
this.UPrice = ko.observable(unitPrice);
this.TotalCost = ko.pureComputed(function () {
if (isNaN(this.Quant() * this.UPrice())) {
return 0;
}
return this.Quant() * this.UPrice();
}, this);
};
ko.applyBindings(new ViewModel(quantity, unitprice));
});
【问题讨论】:
-
您确定您在
var someJSON中获得了正确的数据吗?检查api.jquery.com/jquery.getjson -
...预填充数量和单价有效吗?我没有看到你设置实际值。
-
我不确定 pre populate 是否是正确的术语,但是一旦我将此 $.get.JSON 部分添加到代码中,数据库中的数量和单价值就会出现在表单上。但是我不确定数据库值是从 JSON 中提取还是从标签助手中的字段名称中提取。无论哪种方式,数据库中的值都是正确的。但是,无论我在使用 Knockout 时犯了什么错误,都只会给出一个空白的总成本,所以我显然没有在 observables 中正确传递信息。
-
@scottNoel 你能发布你的视图模型和示例 json 吗?
标签: javascript json knockout.js viewmodel