1

ノックアウト検証を使用して配列に検証を設定する方法は?

私のオブジェクト定義

//c# code
public class Trophy
{
    public string Name { get; set; }
    public string Category { get; set; }
    public double PrizeMoney { get; set; }
}

public class Player
{
    public string Name { get; set; }
    public List<Trophy> Trophies { get; set; }
}

「名前」などの単純な型に対して ko 検証を使用して「必須」などの検証を設定することはできますが、配列であるトロフィーに設定することはできません。以下のように使用する単純なタイプの場合

// javascript code 
var localModel = ko.mapping.fromJSON(getPlayerModelJson());

// Validation
localModel.Name.extend({ required: { message: 'Please enter first name' } });

トロフィーで名前、カテゴリ、賞金をどうするか教えてください。


http://knockoutjs.com/documentation/plugins-mapping.htmlに記載されているように、「「作成」を使用したオブジェクト構築のカスタマイズ」を利用しようとしましたが、重複するトロフィー配列アイテムを作成しています。トロフィーのリスト項目 結果のオブジェクトにも2つの項目がありますが、最後の項目と重複しています

// Java script code
var Trophies = function (data) {

    Name = ko.observable(data.Name).extend({ required: { message: 'Please enter name' } }),
    Category = ko.observable(data.Category),
    PrizeMoney = ko.observable(data.PrizeMoney)
}

var localModel = ko.mapping.fromJSON(getPlayerModelJson(), TrophiesMapping);

//Custom mapping
var TrophiesMapping = {
    'Trophies': {
        create: function (options) {
        return new Trophies(options.data);
        }
    }
} 

私が欲しかったのは、配列内のプロパティを検証することだけです。ありがとう

4

2 に答える 2

0

これは mapping を使用したJSFiddleです。あなたの問題は次の行にあると思います:

var localModel = ko.mapping.fromJSON(getPlayerModelJson(), TrophiesMapping);

私はあなたのコードをコピーし、変更するまでなぜ機能しないのか頭を悩ませていました

ko.mapping.fromJS(...)
于 2013-07-19T02:29:05.560 に答える
-1

この例を見てくださいupida.azurewebsites.net

[注文を追加] をクリックすると、新しいウィンドウに製品の配列が表示されます。いくつかの製品を追加して、それらにデータを入力してみてください。保存して、検証がどのように機能するかを確認してください。knockout.js です。

これはサーバー側の検証であり、クライアント側の制約はありません。

于 2013-08-22T00:16:46.833 に答える