私は最近、データバインド構文を使用してJQuery検証プラグインをフォームに組み込むためのバインディングハンドラを作成しました。ハンドラに複数の情報を提供する必要があることがわかりました。バリデーションを実行するためのフラグと、バリデーションが成功すると呼び出すコールバックを提供する必要がありました。ノックアウトカスタムバインディングハンドラ - 複数の引数と関数コールバックがベストプラクティスですか?
質問:
複数の引数を供給するためのベストプラクティスは何ですか?私はオブジェクト表記の構文に頼っていましたが、別のバインディングを提供して、そのハンドラに渡された "allBindings"パラメータでバインディングをチェックすることもできます...
ハンドラにコールバック関数を提供するためのベストプラクティス?以下は
ハンドラ適用するハンドラとhtmlコードを定義するJSコードです:使用しているとき、あなたの質問の両方、強くお勧めを答えるために
<form id="step1"
data-bind="jqValidation:{enforce: true,
submitHandler: doSomethingInVM}">
<fieldset data-bind="with:searchRequest">
//fields
</fieldset>
<button type="submit">submit</button>
</form>
ko.bindingHandlers.jqValidation = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var accessor = valueAccessor();
//need unwrapobservable??
if (accessor.enforce) {
$(element).find(':submit').removeClass('cancel');
$(element).validate({
submitHandler: function() {
if ($.isFunction(accessor.submitHandler))
accessor.submitHandler();
}
});
} else
$(element).find(':submit').addClass('cancel');
}
};
ありがとう、それはallBindingsAccessorメソッドについての私の考えでした。したがって、私の場合は、データバインド属性にハンドラを渡しませんか? – drogon
私は、あなたが行ったのと全く同じように、VMの参照元オブジェクトの一部として渡します。あなたはまた、醜いと悪い練習と見なされるインラインでハンドラを書くことができます。 – madcapnmckay
ああ、私は同意する、私は私の最初の恋愛プロジェクトのそれらのいくつかの有罪だ:) – drogon