0

Knockout.JSを使い始めており、ビューモデルの有効なフィールド全体の「ポイント」の合計を計算しようとしていますが、これを実行する方法がわかりません。フォームに入力すると、検証された各フィールドに含まれるポイントの完了値に基づいて、スマートプログレスバーを表示できるという考え方です。

フィールドのライブ合計を常に含むようにダイナミックポイントを設定するにはどうすればよいですか?

ビューモデルの簡単なスニペット:

myViewModel = ko.validatedObservable({
 fields: {
  firstname: {
        label: "First Name",
        value: ko.observable("").extend({
              required: true
            }),
        points: 100
  },
  lastname: {
        label: "LastName",
        value: ko.observable("").extend({
              required: true, 
              minLength: 2
            }),
        points: 200
  }
 }
 dynamicpoints: ko.computed { ??? }
})
4

2 に答える 2

0

knockout-validationは、ko.computed'isValid'を使用して検証可能なオブザーバブルを拡張します。

したがって、次のように解決できます。

var dynamicpoints = ko.computed(function(){
    var totalPoints = 0;

    if(!myViewModel.fields.firstname.value.isValid())
        totalPoints += field.points;

    if(!myViewModel.fields.lastname.value.isValid())
        totalPoints += field.points;

    return totalPoints;
};
于 2013-01-29T07:57:52.630 に答える
0

これを試して:

myViewModel = ko.validatedObservable({
    fields: {
        firstname: {
            label: "First Name",
            value: ko.observable("").extend({
                  required: true
                }),
            points: 100
        },
        lastname: {
            label: "LastName",
            value: ko.observable("").extend({
                  required: true, 
                  minLength: 2
                }),
            points: 200
        }
    },
    dynamicpoints: ko.computed(function(){
        var totalPoints = 0;

        if(!myViewModel.fields.firstname.value.error)
            totalPoints += field.points;

        if(!myViewModel.fields.lastname.value.error)
            totalPoints += field.points;

        return totalPoints;
    }
});
于 2013-01-29T03:40:49.403 に答える