1

我正在尝试使用计算来计算某些产品的总数。

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_unitariocantidad都改变了。total不更新。

4

2 回答 2

3
function productModel(data)
{
    var self=this;
    ...
    self.total=ko.computed(function()
        {
            return self.precio_unitario()*self.cantidad(); 
        },this); 
}

您应该将 ko.computed 绑定到this不绑定到函数。您希望它绑定到创建的对象,而不是构造函数,构造函数上没有这些属性。由于您使用的是 self,因此默认情况下实际上会处理它,如果您愿意,可以完全省略第二个参数。

在构造函数内,thisself将引用使用new运算符时创建的对象。因此,所有属性都将在该对象上创建。

于 2013-03-07T01:58:28.417 回答
2

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;

于 2013-03-07T02:27:11.567 回答