はじめに
最近、Webアプリケーションのユーザーは通常、サーバーに何も送信せずに、チェックからの即時応答を期待しています。 これは、クライアント側の検証と呼ばれます。 MVCフレームワークは、控えめなクライアント側の検証をサポートしています。 「邪魔にならない」という用語は、生成されたHTML要素に追加される属性を使用して検証ルールが表現されることを意味します。 これらは、MVCフレームワークの一部であるJavaScriptライブラリ(jquery.validatate.unbtrusive.js)によって解釈されます。MVCフレームワークは、すべての検証作業を行うjQuery検証ライブラリ構成に属性値を適用します。
Backbone.jsがクライアント側で使用される場合、データ検証に同様のアプローチを使用したいと思います。 この記事では、このアプローチの実装について説明します。
MVCに組み込まれたクライアント側の検証の詳細については、次を参照してください。
実装
独自のアダプターを作成する必要があります。アダプターは、Backbone.Validationライブラリーの構成用に生成されたHTML要素に追加された属性を解釈し、すべての検証作業を行います。
バックボーンは、検証ロジックを説明できるポイントのみを提供します。 検証ロジックを説明するには、Backbone.Validationを使用します。 このライブラリを使用すると、次のように簡単な検証ルールを設定できます。
var SomeModel = Backbone.Model.extend({ validation: { name: { required: true, msg: 'Please enter Name } } });
Backbone.Validationライブラリの詳細については、こちらをご覧ください。
このアプローチの背後にある考え方は、属性からルールを読み取り、Backbone.Validationの検証ルールを作成することです。
コードにBackbone.validationを埋め込むポイントは、view内でBackbone.Validation.bind(view)メソッドを呼び出すことです。
var SomeView = Backbone.View.extend({ initialize: function(){ Backbone.Validation.bind(this); } });
そのため、独自のラッパーで置き換えることにより、属性をルールに変換するコードを配置します。
Backbone.Validation.bind = _.wrap(Backbone.Validation.bind, function (bind, view, options) { if (options.autoValidation) { var validation = {}; // view.$("[data-val=true]").each(function (item, selector) { var data = $(this).data(); var options = Backbone.Validation.adapters._create(data); if (options) validation[data.valAttr || this.name] = options; }); if (view.model && !_.isEmpty(validation)) view.model.validation = validation; } return bind(view, options); });
ラッパーでは、Backbone.Validation.adaptersを使用しました。 このオブジェクトは、各属性のアダプターのリストと、要素のすべての属性のアダプターを呼び出す中央の_createメソッドで構成されます。 その短縮コードを以下に示します。
Backbone.Validation.adapters = { valRequired: function (data) { return { required: true, msg: data.valRequired }; }, valLength: function (data) { return { rangeLength: [data.valLengthMin, data.valLengthMax], msg: data.valLength }; }, // _create: function (data) { var options = []; for (var p in data) if (this[p]) options.push(this[p](data)); return options.length ? options : undefined; }, };
検証ルールを読み込む場合は、次に示すように、autoValidation:trueパラメーターをバインドメソッド呼び出しに追加する必要があります。
Backbone.Validation.bind(this, {autoValidation: true});
まとめ
この記事では、クライアント側でBackbone.jsが使用されている場合のデータ検証のアプローチについて説明します。 クライアント側とサーバー側でのロジックとコードの重複を避けました。 クライアントデータ検証に対する標準のMVCアプローチが使用されました。