2013-03-13 138 views
0

我正在使用Knockout.js开发计算器。我面临的情况是我不知道如何处理。 在下面的示例中,当用户输入产品和值并将值保存在数据库中时,一切正常。但是当用户来编辑这个页面时,我的要求是显示用户输入的所有值以及总数。但是,当用户改变产品或数量中的某些东西时,总数应该按预期改变。Knockout.js计算器

我们现在将总数存储在数据库中,总数可以由一些管理员用户进行更改。在这种情况下,是否有一种方法可以在用户转到编辑页面时覆盖计算值,但是当用户更改产品或数量,那么计算应该与产品和数量的最新值一起发生。

帮助表示赞赏。

var TsFoundationDeviceModel = function(product,qty) { 
var self = this; 
self.product = ko.observable(); 
self.quantity= ko.observable(); 
self.computedExample = ko.computed(function() { 
    return self.product() * self.quantity() ; 
});} 

我的HTML代码看起来像

<input name="product" data-bind="value:product"> 
<input name="value" data-bind="value:value"> 
<input name="total" data-bind="value:computedExample"/> 
+0

当你加载编辑页面时,你可以使用javascript或jQuery来分配总数吗?那么当你进行更改时,正常的AppViewModel()会根据需要更新总数? – tymeJV

+0

但是,我的模型将价值的数组,可能是20 ..用脚本来做将是艰难的。 –

+0

你有没有找到任何解决方案?我也在努力解决同样的问题。 – praveen

回答

0

你必须将视图屏幕绑定。看看这个小提琴,并给它

var TsFoundationDeviceModel = function(product,qty) { 
var self = this; 
self.product = ko.observable(product); 
self.quantity= ko.observable(qty); 
self.computedExample = ko.computed(function() { 
return self.product() * self.quantity() ; 
});} 

ko.applyBindings(new TsFoundationDeviceModel(2,3)); 

http://jsfiddle.net/Z6VPV/5/

+0

有没有一种方法可以直接从DB显示计算值。有时计算值会从第三方的DB中更改。 –

+0

你将不得不设置刷新对象的重新发生的ajax调用。 – Darussian

+0

是否有一种方法可以用我从数据库中获取的值覆盖计算值。 –

0

当引用内观测你的计算,你需要像对待功能,所以不是return self.product * self.quantity ;你会使用return self.product() * self.quantity();

小提琴:http://jsfiddle.net/SAV9A/

+0

糟糕。现在编辑代码。但在这种情况下,我想在用户编辑页面时显示来自数据库的数据。有时,数据库中的总数会由第三方API进行更改。 –

+1

您需要编写ajax调用来从数据库中获取数据,并将该值存储在可观察值中。如果您的代码中存在您认为数据可能陈旧的点(通过api在数据库中更改),则您将使用您用于获取要初始化的值的相同ajax方法刷新数据。 – jarmie

+0

是否有一种方法可以用我从数据库中获取的值覆盖计算值。 –