2013-02-04 208 views
1

我試圖做一個例子,使用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

從你在哪兒叫'DatabindFunction'?你的觀點如何? – nemesv

+0

我叫DatabindFunction在我的路線的JavaScript類... 當我致電firts鏈接... –

回答

1

你必須使用new關鍵字在productListTemp功能創建對象:

this.produtos.push(new produto.makeproduto(1, 'Pão', 045, 100)); 

當你只需要調用函數指針this還有另一個方面 - window和你所有的屬性添加到它,而不是新的對象。

+0

鴕鳥政策工作yeat –

+1

除了刪除'從構造函數返回 – vittore

+0

如果this'要使用構造' makeproduto'沒有'new',你應該添加代碼'if(!(this instanceof makeproduto))返回新的makeproduto(id,nome,preco,quantidade);'作爲函數'makeproduto'的第一行。 –

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。

+0

我發現我的錯誤是在路由類內...我嘗試使用sammy.js裝載html模板「this。$ element()。append(」大多數沒有工作,當我直接在頁面上添加html代碼完美。 有人可以幫助我。 如何利用基因敲除薩米+ –

+0

你只需要使用插件和配置是正確的我加載外部模板。它無關薩米。 – vittore

+0

還要考慮看約翰帕帕當然可以很容易地找到它,它涵蓋了你的問題以及在你之後會有的問題=) – vittore

0

確保你擺脫多餘的「=」

this.quant = ko.computed(function() { 
      return this.vm().length; 
     }, this); 

你也可以使用純計算的淘汰賽3.2.0及以上 它將提供性能和內存優勢

this.quant = ko.pureComputed(function() { 
      return this.vm().length; 
     }, this);