Javascript 在一个可观测的轨道上计算
我试着用一个计算机来计算一些产品的总量Javascript 在一个可观测的轨道上计算,javascript,knockout.js,Javascript,Knockout.js,我试着用一个计算机来计算一些产品的总量 function productViewModel(){ self = this; function productModel(data) { var self=this; self.id=ko.observable(data.id); self.codigo=ko.observable(data.codigo); self.recurso=ko.observable
function productViewModel(){
self = this;
function productModel(data)
{
var self=this;
self.id=ko.observable(data.id);
self.codigo=ko.observable(data.codigo);
self.recurso=ko.observable(data.recurso);
self.unidad=ko.observable(data.unidad);
self.precio_unitario=ko.observable(0);
self.cantidad=ko.observable(0);
self.total=ko.computed(function()
{
return self.precio_unitario()*self.cantidad();
},productModel);
}
self.products = ko.observableArray([]);
self.addProduct = function(product)
{
self.products.push(new productModel(product));
};
self.removeProduct = function()
{
self.products.remove(this);
};
}
orden = new productViewModel()
ko.applyBindings(orden);
但是当precio_unitario
和cantidad
发生变化时<代码>总计不更新
function productModel(data)
{
var self=this;
...
self.total=ko.computed(function()
{
return self.precio_unitario()*self.cantidad();
},this);
}
您应该将ko.computed绑定到this
而不是绑定到函数。您希望它绑定到创建的对象,而不是构造函数,因为构造函数上没有这些属性。由于您使用的是self,因此默认情况下会处理这个问题,如果您愿意,可以完全忽略第二个参数
在构造函数中,this
或self
将引用使用new
运算符时创建的对象。因此,将在该对象上创建所有属性
您应该将ko.computed绑定到this
而不是绑定到函数。您希望它绑定到创建的对象,而不是构造函数,因为构造函数上没有这些属性。由于您使用的是self,因此默认情况下会处理这个问题,如果您愿意,可以完全忽略第二个参数
在构造函数中,
this
或self
将引用使用new
运算符时创建的对象。因此,将在该对象上创建所有属性 self=this代码>应该是var self=this代码>;否则您将覆盖全局self
。同时取出计算机上的、productModel
;没必要
重要部分:
function productViewModel() {
var self = this;
function productModel(data) {
var self = this;
...
self.total = ko.computed(function() {
return self.precio_unitario()*self.cantidad();
});
}
...
}
同样重要的是,确保您始终使用正确的格式写入可观察对象。应为self.catiad(newValue)代码>和非self.catidad=newValue代码>self=this代码>应该是var self=this代码>;否则您将覆盖全局self
。同时取出计算机上的、productModel
;没必要
重要部分:
function productViewModel() {
var self = this;
function productModel(data) {
var self = this;
...
self.total = ko.computed(function() {
return self.precio_unitario()*self.cantidad();
});
}
...
}
同样重要的是,确保您始终使用正确的格式写入可观察对象。它应该是self.catidad(newValue)代码>和非self.catidad=newValue代码>+1,但是因为他已经在self
中存储了对这个
的引用,所以有必要绑定吗?@Robbie good call。我只是看到绑定了错误的东西,我想我应该用正确的东西替换它,但完全删除它应该是正确的fine@kadosh如果仍然存在问题,可能是绑定问题,而不是视图模型设置问题。是否确定视图模型组件实际上正在更改,并且已正确绑定到“总计”?像这样的嵌套内容在绑定时可能会变得很棘手(尽管看起来你的评论现在不见了。解决了?+1,但是因为他已经在self
中存储了对这个
的引用,有必要绑定吗?@Robbie good call。我只是看到绑定了错误的东西,我想我应该用正确的东西替换它,但完全删除它应该是正确的fine@kadosh如果仍然存在问题,可能是绑定问题,而不是视图模型设置问题。是否确定视图模型组件实际上正在更改,并且已正确绑定到“总计”?像这样的嵌套内容在绑定时可能会变得很棘手(尽管看起来您的评论现在不见了。解决了吗?)。顺便说一句,当你有var self=that=this
,您正在设置一个全局,该。很好的一点,我应该对此进行评论,但对于Kadosh来说,这更像是一个简短的视觉效果。在其他区块中有更多的细微差别,但我希望他能理解发生了什么。顺便说一句,当你有var self=that=this
,您正在设置一个全局,该。很好的一点,我应该对此进行评论,但对于Kadosh来说,这更像是一个简短的视觉效果。其他区块中出现了更多细微差别,但我希望他能理解发生了什么