0

私は Knockout.js が初めてで、UI に 3 つのフィールドがあります。商品価値。数量合計

計算されたオブザーバブルですべてが正常に機能し、データを保存できます。ビジネス上の理由により、合計はバックエンドで変更されます。

データを取得している間、DB からの合計を初期値として表示する必要がありますが、ユーザーが製品と値を変更した場合は、元の計算関数を使用する必要があります。

bindingHandlers を試しましたが、うまくいきませんでした..

ヘルプは非常に高く評価されます。

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"/>
4

3 に答える 3

3

これを行う唯一の方法は、初期化子を追跡することです。したがって、ビューモデルを初めて呼び出すときは、初期化をtrueに設定し、合計が未定義でないかどうかを確認します。その場合は、合計を返し、初期化をリセットします。それ以降、他の2つのフィールドに基づいて計算されたものが常に更新されます。

これが同じフィドルです(ちなみに、バインディングにエラーがあり、「value」という名前のプロパティはありません。数量だと思います

http://jsfiddle.net/sujesharukil/YTDZ9/

var TsFoundationDeviceModel = function(product,qty,total) {
    var 
    self = this;
    self.initialize = ko.observable(true);
    self.product = ko.observable(product);
    self.quantity= ko.observable(qty);
    self.computedExample = ko.computed(function() {
        var value = self.product() * self.quantity();
        if(self.initialize())
        {
            self.initialize(false);
            if(total != undefined && total != null)
                return total;
        }
        return value ;
    });
}


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

本質的には、ビューモデルのインスタンスを初めて作成するときに、合計を1回だけ返します。

お役に立てれば!

-スージ

于 2013-03-18T13:47:50.220 に答える
0

あなたが何を望んでいるかを正しく理解していれば、オブザーバブルが変更されない限り、計算済み自体に初期値を返すことができます。

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
    }
});
于 2013-03-15T12:39:13.973 に答える
0

私があなたから得ることができる限り、DBから値を取得する3つの入力を保存するということです。

ユーザーが保存ボタンをクリックすると、データがサーバーに送信されてDBに更新または挿入され、フォームがロードされると、入力にDBからのユーザーデータが入力されます。

したがって、その目的にはKnockoutJS マッピング プラグインを使用する必要があります。

そのプラグインを使用して、サーバーに ajax 呼び出しを行い、データを取得して変換し、それをhtml にViewModel適用するだけです。ViewModel

同じプラグインを使用して、ViewModelJSON 形式に変換し、サーバーに送り返して DB に保存できます。

于 2013-03-14T23:50:11.313 に答える