2013-01-03 11 views
11

私はノックアウト検証を使用していませんでした。私はノックアウト検証で何ができるのかを感じています。ノックアウト検証カスタムメッセージテンプレートの問題

エラーが発生したときに、入力タグの右側にエラーメッセージではなくアイコンを表示できるかどうかを判断しようとしています。また、ユーザーがアイコンの上を移動すると、エラーメッセージが表示されます。

誰でもこれを行っているのですか、これを達成する方法がありますか?

ありがとうございました。

EDIT:

は私が私の見解モデルに次のように持っていると言う(私は何をしようとしているのより詳細な例):

var firstName = ko.observable().extend({required: true}); 

マイHTML:

<input data-bind="value: firstName" /> 

私の理解では、最初の名前のテキストボックスを空白のままにしておくと、デフォルトでは、このフィールドが必須であることを示すテキストがテキストボックスの右側に表示されます。私は理解しようとしている何

はホバー時に、エラーメッセージがポップアップします、右のアイコンを表示する右のエラーテキストを表示するデフォルトの動作を変更する方法です。

ので、スタートは次のようなものになるだろう:私が正しくmessageTemplate機能を使用している場合、私は見当もつかない

<div data-bind="validationOptions: {messageTemplate: 'myCustomTemplate'}">  
    <input data-bind="value: firstName" /> 
    <input data-bind="value: lastName" /> //also required 
</div> 
<div id='myCustomTemplate'> 
    //This icon should only display when there is an error 
    <span class="ui-icon ui-icon-alert" style="display: inline-block"/> 

    //css/javascript would display this when user hovers over the above icon 
    <span data-bind="validationMessage: field" /> 
</div> 

。また、エラーごとに正しいエラーメッセージを表示するために、customTemplateにテキストをバインドするべきかどうかもわかりません。 IOW、ファーストネームとラストネームにカスタムエラーメッセージがある可能性があります。両方が同じテンプレートを使用している場合、テンプレートはどのようにカスタムエラーメッセージに対応していますか?

私はそれが理にかなっていると思います。

+0

いくつかのコードがあなたのニーズにソリューションを調整すると便利だろうが、答えはYESです。 Knockoutでは、デフォルトのエラーテキスト(https://github.com/ericmbarnard/Knockout-Validation/wiki/Validation-Bindings)を上書きするために使用できるvalidationMessage属性を使用して、カスタムdivタグまたはスパンタグを設定できます。これに加えて、エラーが見つかった場合にツールヒントを有効/無効にすることができるカスタムオブザーバブル関数を設定することができます。いくつかのサンプルコード(できればフィドル)を見せることができれば、必要な変更を加えて、あなたが望むように動作させることができます。 –

+0

ご返信ありがとうございます...遅れてごめんね。私は、私が何をしているかをより完全に説明する編集を追加しました。 – RHarris

答えて

18

アイコンを表示し、ホバーリング時にエラーメッセージを表示することは可能です。

1つのプロジェクトでは、同様のことを行っています。バッジにはエラー番号が表示されますが、decorateElementを使用してフィールドを強調表示し、errorsAsTitleOnModifiedを使用して入力上にカーソルを置いたときのエラーを表示します。

エラーメッセージテンプレートを作成するには、テンプレートをスクリプトタグで囲む必要があります。それはko template bindingのテンプレートのように機能します。

テンプレート内では、 'field'を参照して検証済み観測値にアクセスできます。エラーメッセージは、オブザーバブルのプロパティ 'error'に格納されます。

<script type="text/html" id="myCustomTemplate"> 
    <span data-bind="if: field.isModified() && !field.isValid(), 
        attr: { title: field.error }">X</span> 
</script> 

私はこの動作を示すためにバイオリンを作成しました:http://jsfiddle.net/nuDJ3/180/

+0

ありがとうございました!これはまさに私が達成しようとしていたものです! – RHarris

+0

実際、私はもう少しこれで遊ぶようになったので、予想通りに動作していないことがわかりました。まず、X(バッジ)は決して消えません。 2番目に、このフィーダーhttp://jsfiddle.net/nuDJ3/5/を調べて、フィールドをクリアしてもエラーメッセージが表示されないことに注意してください。何か不足していますか? – RHarris

+0

ああ申し訳ありません。私はそれが有効であるか修正されていない場合、メッセージを非表示にしていませんでした。ノックアウト検証では、通常のバインディングを使用する必要があるために、そのスパンを1回挿入します。私は答えを更新し、[フィドル](http://jsfiddle.net/nuDJ3/6/)の新しいバージョンを作成しました。トリックは、 "if:field.isModified()&&!field.isValid()"をスパンのバインディングに挿入することです。 – delixfe