根据异步数据计算的可观察量
Computed observable calculated from async data
在我的视图模型中,我有一个可观察的数组,需要从$.getJSON调用填充。我想有一个计算的可观察量来表示返回的 JSON 中包含的"价格"列的总和。
我已经设法填充了可观察数组...
(function($){
function Coupon(expiration, value) {
var self = this;
self.expiration = expiration;
self.value = value;
}
$(function() {
$.when($.getJSON(coupons_url, null)).done(function(couponsJson) {
ko.applyBindings({
coupons: ko.utils.arrayMap(couponsJson[0].objects,
function(coupon) {
return new Coupon(coupon.expiration, coupon.value);
})
savingsAvailable: ko.computed(function() {
var total = 0;
for (var i = 0; i < this.coupons().length; i++) {
total += parseFloat(this.coupons()[i].value / 100);
}
return total.toFixed(2);
})
});
});
});
})(jQuery);
。但我不确定当我尝试填充计算的可观察量时如何访问coupons
的值。 this.coupons()
错误:"this.coupons() 不是一个函数"。我需要做什么才能完成此操作,和/或我做错了什么?
ko.computed() 在计算可观察量时,需要第二个参数来定义 "this" 的值。因此,无论什么对象持有"优惠券",您都希望将其作为第二个参数传递。
或者,您可以尝试如下方法创建一个视图模型,而不是动态定义对象并将其作为参数传递给 applyBindings。
var Coupon = function(expiration, value) {
var self = this;
self.expiration = expiration;
self.value = value;
}
var viewModel = function(couponsJson){
var self = this;
self.coupons = ko.utils.arrayMap(couponsJson[0].objects, function(coupon) {
return new Coupon(coupon.expiration, coupon.value);
})
self.savingsAvailable = ko.computed(function() {
var total = 0;
for (var i = 0; i < self.coupons().length; i++) {
total += parseFloat(self.coupons()[i].value / 100);
}
return total.toFixed(2);
})
}
(function($){
$(function() {
$.when($.getJSON(coupons_url, null)).done(function(couponsJson) {
var vm = new viewModel(couponsJson)
ko.applyBindings(viewModel);
});
});
})(jQuery);
相关文章:
- 下拉列表未从计算的可观察项更新
- 在编辑记录上可观察的挖空 JS 计算
- 挖空映射:加载数据后,父模型中的计算可观察量不会更新
- Knockout.js:在可选定义的值上计算可观察性
- 如何使用ES6在Ember中声明可观察性或计算属性
- 击倒计算的可观察到的未发射'写'
- 向KO传递在对象内可观察到的计算值
- 如何使某些可观察的“独立”计算可观察(Knockout.js)
- 如何在运行时向计算可观察量添加其他数组项
- Knockout.js - 如何在计算的可观察量中获取可观察属性的值
- 在不重置对象的情况下重新计算计算可观察量
- 从计算的可观察量中获取价值
- Knockout的可写计算在AngularJS中可观察的模拟是什么?
- 使挖空计算订阅不在初始执行路径中的可观察量
- 如何在淘汰.js中实现可计算的可观察量
- 根据异步数据计算的可观察量
- .replace() 表达式未在计算可观察量中更新
- 对计算可观察量的挖空 JS 绑定不起作用
- 挖空添加计算中断可观察数组
- 将通过原型计算的可观察对象添加到构造函数中