0

カスタムバインディングハンドラーがあり、IIFEに変更したいと思います。私はインターネットでIIFEについて読んでいますが、カスタムハンドルをIIFEに変更する方法がわかりませんでした。では、次のバインディングハンドラーをIIFEに変更するにはどうすればよいですか?

define(['knockout', 'jquery'], function(ko, $) {
    ko.bindingHandlers.er = {
        init: function(el, va) {
            console.log($(el).find('.n').text());
            $(el).find('.edit').hide().end().find('.detail').show();
            $(el).find('.ebtn').on('click', function() {
                $(el).find('.edit, .detail').toggle();
            });
            $(el).find('.ubtn').on('click', function() {
                $(el).find('.edit, .detail').toggle();
            });
        }
    };
});
4

1 に答える 1

1

ここで何を求めているのかははっきりしていません:(。
即時呼び出し関数式(IIFE)は、すぐに実行される匿名関数です。あなたの場合、より具体的にできない場合は、どこが必要かを推測するのは非常に困難です。 iifeを配置する
には、通常、関数スコープを利用してクロージャーとして使用するために、コード全体をiifeに配置します。これにより、グローバルオブジェクトの汚染が最小限に抑えられ、通常は次のようになります。

(function(global,undefined){
    // the code goes here
    // global === window
})(this);

あなたの場合、あなたは同じことをすることができます:

 (function(global,undefined){
    define(['knockout','jquery'],function(ko,$){
        // ...
    });
})(this);

更新:
ここにそれらを必要とする人々のためのいくつかの説明があります。次のパターンが使用されます。

  • var foo = bar;(その後window.foo === foo)などのグローバル変数のリークを防ぐため
  • undefined値が上書きされないようにします。何かが未定義かどうかを確認したいとします。あなたはそれをする2つの方法があります:
    • typeof foo === 'undefined'
    • foo === undefined
      undefined2つ目は短いですが、変数の値 を単純に上書きできるため、多くの場合、優先されませんundefined = 13;
      iifeの引数に実際の値を提供しないことにより、実際には変数を未定義undefinedにリセットしていることになります。undefined
  • グローバルオブジェクトを一般化する
    • jsエンジンが最初に低いスコープを調べるため 、global変数へのアクセスはオブジェクトへのアクセスよりも速いと言う人もいます。window
    • ブラウザとは異なる環境でコードを実行していて、windowオブジェクトを呼び出す場合、グローバルオブジェクトは環境ごとに異なるため、コードが破損する可能性があります(adobe pdfs、node js、rhino ...)。これは、グローバルオブジェクトを変数(この場合はglobal)に再マッピングthisし、グローバルスコープからオブジェクトに参照することで解決できます。
于 2012-07-15T16:30:57.470 に答える