1

observablearray 要素に適用した検証ルールに問題があります。カスタム メッセージ テンプレートを使用してエラーを表示しています。問題は、エラーがあるときに表示されないことですが、関連するフィールドに対して「*」が表示されます。以下は私のモデルです:

function ViewModel(item) {
var parse = JSON.parse(item.d);
var self = this;
this.ID = ko.observable(parse.ID).extend({ required: { params: true, message: "ID is required" }});
this.Name = ko.observable(parse.Name);
this.WeeklyData = ko.observableArray([]);
var records = $.map(parse.WeeklyData, function (data) { return new Data(data) });
this.WeeklyData(records);
}

var Data = function (data) {
this.Val = ko.observable(data).extend({
    min: { params: 0, message: "Invalid Minimum Value" },
    max: { params: 168, message: "Invalid Maximum Value" }   
});

私が使用している検証構成は次のとおりです。

    // enable validation
    ko.validation.configure({
    registerExtenders: true,
    messagesOnModified: false,
    insertMessages: true,
    parseInputAttributes: false,
    messageTemplate: "customMessageTemplate",
    grouping: { deep: true }
    });
    ko.validation.init();

カスタム メッセージ テンプレートは次のようになります。

   <script id="customMessageTemplate" type="text/html">
      <em class="errorMsg" data-bind='visible: !field.isValid()'>*</em>
   </script>

   <ul data-bind="foreach: Errors">
     <li class="errorMsg" data-bind="text: $data"></li>
   </ul>  

この実装では、カスタム テンプレートに検証メッセージが表示されません。しかし、構成 deep: true を削除すると、監視可能な配列要素は検証されませんが、他の監視可能な (ID) とメッセージが正しく表示されます。

私はこれに非常に混乱しており、少し立ち往生しているので、誰かが助けてくれれば感謝します/

前もって感謝します。

4

2 に答える 2