2

次のような定義でいっぱいの大きなJSファイルがあるとします。

$(document).on('focusin', '.field', function () {
    // some logic
}).on('focusout', '.field', function () {
    // some logic
});

セレクターが参照する場所では、#elementそれをノックアウトviewModelに簡単にリファクタリングできます-data-bind要素のアクションの属性を追加し、ロジックをviewModelに移動するだけです。
しかし、それらの「CSSバウンドイベント」の配線状況では、それがどのように行われるのかわかりません。

ここでの一般的/推奨される方法は何ですか?光沢のあるノックアウトコードの横にこれを残す必要がありますか?

4

3 に答える 3

1

カスタムバインディングプロバイダーを使用すると、data-bind属性を定義しなくてもノックアウトバインディングを使用できます。ここにいくつかの例と詳細情報があります:

于 2013-01-18T00:51:49.270 に答える
0

カスタムバインディングを作成するようなことをします。

http://knockoutjs.com/documentation/custom-bindings.html

焦点を当てて例を見てください。

ko.bindingHandlers.hasFocus = {
    init: function(element, valueAccessor) {
        if(element.hasClass('yourClass') {
            var value = valueAccessor();
            value(true);
        }          
    },
    update: function(element, valueAccessor) {
        var value = valueAccessor();
        if (ko.utils.unwrapObservable(value))
            element.attr('class', 'somethingElse');
        else
            element.toggleClass('somethingToToggle');
    }
};
于 2013-01-17T14:40:34.850 に答える
0

私はあなたが持っているものは大丈夫だと思います、そして多分あなたの質問はあなたのコードをどのように整理するかということに向けられています。もしそうなら、tekpubからこのコードサンプルをチェックして、RobConeryが彼のアプリをどのように構成したかを確認することをお勧めします。

基本的に、彼は名前空間を使用してノックアウト関連のコードをカプセル化し、同じパターンを使用してイベントのワイヤリングをカプセル化します。

私が調べるファイルは、application.js、order_editor.js、および彼が自分のものをインスタンス化するこのhtmlファイルです。

また、 requirejsのようなものを使用して、必要に応じて物をロードすることで、より洗練されたものにすることができます。

于 2013-01-17T16:41:52.067 に答える