我试图使用Knockout.js
做一个不起作用的例子。我创建了一个创建对象的函数
var makeproduto = function (id, nome, preco, quantidade) {
this.Id = ko.observable(id);
this.Nome = ko.observable(nome);
this.Preco = ko.observable(preco);
this.Quantidade = ko.observable(quantidade);
this.ValorTotal = ko.computed(function () {
return this.Quantidade() * this.Preco();
}, this);
return this;
};
另一个填充产品实体的功能
var productListTemp = function () {
this.produtos = ko.observableArray([]);
this.produtos.push(produto.makeproduto(1, 'Pão', 045, 100));
this.produtos.push(produto.makeproduto(2, 'leite', 135, 100));
this.produtos.push(produto.makeproduto(3, 'ovos', 035, 96));
this.produtos.push(produto.makeproduto(4, 'guarana', 425, 100));
this.produtos.push(produto.makeproduto(5, 'fanta', 425, 100));
this.produtos.push(produto.makeproduto(6, 'coca cola', 500, 100));
this.produtos.push(produto.makeproduto(7, 'torta pedaço', 215, 60));
this.produtos.push(produto.makeproduto(8, 'torta inteira', 990, 10));
this.produtos.push(produto.makeproduto(9, 'sorvete - frutale', 225, 100));
this.produtos.push(produto.makeproduto(10, 'sorvete - magnum white / black', 500, 50));
this.produtos.push(produto.makeproduto(11, 'sorvete - magnum gold', 600, 25));
this.produtos.push(produto.makeproduto(12, 'bolo de cenora', 995, 100));
return this.produtos();
};
然后DataBind
无法处理屏幕上的任何数据。
MountList = function () {
var temp = productListTemp();
this.vm = ko.observableArray(temp),
this.quant == ko.computed(function () {
return this.vm().length;
}, this);
},
DatabindFunction = function () {
ko.applyBindings(new MountList());
};
我哪里可以错?
答案 0 :(得分:1)
您必须使用new
关键字在productListTemp
函数中创建对象:
this.produtos.push(new produto.makeproduto(1, 'Pão', 045, 100));
当您只调用函数this
时,指针有另一个上下文 - window
并且您向其添加所有属性而不是新对象。
答案 1 :(得分:0)
var makeproduto = function (id, nome, preco, quantidade) {
this.Id = ko.observable(id);
this.Nome = ko.observable(nome);
this.Preco = ko.observable(preco);
this.Quantidade = ko.observable(quantidade);
this.ValorTotal = ko.computed(function () {
return this.Quantidade() * this.Preco();
}, this);
}
, productListTemp = function () {
this.produtos = ko.observableArray([]);
this.produtos.push(new makeproduto(1, 'Pão', 045, 100));
this.produtos.push(new makeproduto(2, 'leite', 135, 100));
return this.produtos();
};
您也可以考虑使用ko.mapping插件创建具有可观察属性的对象来自普通JSON。
答案 2 :(得分:0)
确保你摆脱额外的'='
this.quant = ko.computed(function () {
return this.vm().length;
}, this);
您还可以在Knockout 3.2.0及更高版本中使用Pure Computed 它将提供性能和内存优势
this.quant = ko.pureComputed(function () {
return this.vm().length;
}, this);