设置computed Observable Knockout.js的默认值

设置computed Observable Knockout.js的默认值,knockout.js,Knockout.js,我对Knockout.js是新手 我在UI中有3个字段。 产品价值。 量 总数 一切都与计算出的可观测数据配合良好,并且可以保存数据。由于某些业务原因,总数将在后端更改 在检索回数据时,我需要将数据库中的总数显示为初始值,但是当用户更改乘积和值时,应该使用原始的计算函数 我试过了,但没有成功 帮助将是非常可观的 var TsFoundationDeviceModel = function(product,qty,total) { var self = this; self.pro

我对Knockout.js是新手 我在UI中有3个字段。 产品价值。 量 总数

一切都与计算出的可观测数据配合良好,并且可以保存数据。由于某些业务原因,总数将在后端更改

在检索回数据时,我需要将数据库中的总数显示为初始值,但是当用户更改乘积和值时,应该使用原始的计算函数

我试过了,但没有成功

帮助将是非常可观的

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

<input name="product" data-bind="value:product">
<input name="value" data-bind="value:value">
<input name="total" data-bind="value:computedExample"/>
var TsFoundationDeviceModel=功能(产品、数量、总数){
var self=这个;
自我产品=可观察到的(产品);
自身数量=可观察到的ko(数量);
self.computedExample=ko.computed(函数(){
返回self.product()*self.quantity();
});
}

据我所知,您存储了3个输入,这些输入是从数据库中获取的值

当用户单击某个保存按钮时,数据应发送到服务器以更新或插入数据库,当加载表单时,应使用数据库中的用户数据填充输入

所以你应该用这个

使用该插件,您只需对服务器进行ajax调用,以获取数据并将其转换为
ViewModel
,然后在html上应用该
ViewModel


通过使用相同的插件,您可以将您的
ViewModel
转换为JSON格式,并将其发送回您的服务器以保存在数据库中。

据我所知,您存储了3个输入,从数据库中获取了它的值

当用户单击某个保存按钮时,数据应发送到服务器以更新或插入数据库,当加载表单时,应使用数据库中的用户数据填充输入

所以你应该用这个

使用该插件,您只需对服务器进行ajax调用,以获取数据并将其转换为
ViewModel
,然后在html上应用该
ViewModel


通过使用相同的插件,您可以将
ViewModel
转换为JSON格式,并将其发送回服务器,以DB格式保存。

如果我正确理解您的要求,您可以让计算本身返回初始值,除非观测值发生变化

self.product = ko.observable(product);
self.quantity= ko.observable(qty);
self.orig_product = ko.observable(product);
self.orig_quantity= ko.observable(qty);

self.computedExample = ko.computed(function() {
    if (self.product() !== self.orig_product
        || self.quantity() !== self.orig_quantity()) {
        return self.product() * self.quantity() ;
    } else {
        // return the initial value
    }
});

如果我正确理解了你想要的,你可以让计算本身返回初始值,除非观察值发生变化

self.product = ko.observable(product);
self.quantity= ko.observable(qty);
self.orig_product = ko.observable(product);
self.orig_quantity= ko.observable(qty);

self.computedExample = ko.computed(function() {
    if (self.product() !== self.orig_product
        || self.quantity() !== self.orig_quantity()) {
        return self.product() * self.quantity() ;
    } else {
        // return the initial value
    }
});

唯一可以做到这一点的方法是跟踪初始值设定项。因此,第一次调用viewmodel时,将initialize设置为true,并检查总数是否未定义。如果是,则返回总计、重置和初始化。从那时起,它将始终根据其他两个字段更新计算的值

这是同样的问题(顺便说一句,绑定中有一个错误,没有名为“value”的属性,我假设它是数量

在essensce中,第一次创建viewmodel实例时,只返回一次total

希望这有帮助


-Suj

唯一可以做到这一点的方法是跟踪初始值设定项。因此,第一次调用viewmodel时,将initialize设置为true,并检查总数是否未定义。如果是,则返回total,重置initialize。从那时起,它将始终根据其他两个字段更新计算值

这是同样的问题(顺便说一句,绑定中有一个错误,没有名为“value”的属性,我假设它是数量

在essensce中,第一次创建viewmodel实例时,只返回一次total

希望这有帮助



-Suj

请发布您的代码或您尝试过的内容。因此,问题是当您从DB获取数据时,或者当用户更新输入值时??问题是如何设置数据(即总计)我从服务器获得的值以及产品值和数量,但Knockout最初不应该进行计算,因为total是一个计算字段。它应该只显示我从服务器获得的总值,当用户在ProductValue和Quantity中更改某些内容时,值应该更改。要正确设置,如何设置默认值加载页面时计算字段的ue,但当可靠值(即产品值和数量)发生变化时,应触发计算函数。请发布您的代码或您尝试过的内容。因此,问题是当您从DB获取数据或当用户更新输入值时??问题是如何设置数据(即总计)我从服务器获得的值以及产品值和数量,但Knockout最初不应该进行计算,因为total是一个计算字段。它应该只显示我从服务器获得的总值,当用户在ProductValue和Quantity中更改某些内容时,值应该更改。要正确设置,如何设置默认值加载页面时计算字段的ue,但随着可靠值(即产品值和数量)的变化,应触发计算函数。感谢Ebram。我这样做没有问题,但在我的示例中,当我获得总值时,如何将该值分配给总值。现在将根据产品和值计算,而根据我的要求,在加载页面时或在用户更改产品或价值之前,不应发生更改。根据Knockoutjs文档,“计算的可观测值是依赖于一个或多个其他可观测值的函数,并且在这些依赖项发生任何更改时将自动更新。”我正在努力将服务器的默认值设置为总输入。除此之外,一切正常。有人能帮我吗?好的,你如何将来自服务器的数据应用到你的html中?对于产品和价值,我只是这样调用TsFoundationDeviceModel(10,20),对于总输入,我可以传递另一个参数,但需要找到一种方法