2016-09-08 2 views
0

私はJavascriptで座っていて、別の関数の中で関数をプライベートにする方法を考えています...私の関数 "render()"には多くの関数があり、ページの終わり...しかし、私はどのようにそれらを書くのですか?私は私の例を持っていて、今まで私が行ってきたことは...誰かが私の理解を助けることができますか? 関数を他の関数内でプライベートにするJquery

もの

は私の関数です:

(function($) { 
 
    'use strict'; 
 
    session.page.pending = true; 
 
    var Product = finance.entre.Model.extend({ 
 
      type: 'Product', 
 
      render: function() { 
 
       
 
//here should all this functions inside render: function() (like addEventHandlers: and populatepage:) become private 
 
       
 
    addEventHandlers: function(){  
 
     $(document).on('change',':input[name=PR_Type]', function(event) { 
 
        var $target = $(event.target); 
 
        product.updateObjectTypes($target.val()); 
 
        product.updateHideWhen(); 
 
       }); 
 
       $(document).on('focus', ':input[name=DocUNID]', function(){ 
 
        this.select(); 
 
       }); 
 
      }, 
 
      populatePage: function() { 
 
       console.log('populatePage'); 
 
       if (session.user.type == 'Internal') { 
 
        $('.external').remove(); 
 
        dbService.dbLookup('main', 'vwInsurances', 2, null).done(function(data){ 
 
         console.log('lookup done'); 
 
         $('select[name=PR_Insurance]').setOptions(data, true); 
 
        }); 
 
       } 
 
    }); 
 
       
 
       
 
    $.when(session, $.ready).then(function(){ 
 
      var product = new Product(undefined, {id: session.page.id}); 
 
      product.fetch().always(function() { 
 
      product.render(); 
 
      session.page.render.resolve(); 
 
     }); 
 
    });
は、だから私はこのような何かを試してみました:私は名前だけを削除

(function($) { 
 
    'use strict'; 
 
    session.page.pending = true; // delay translation until page rendered 
 
    var Product = finance.entre.Model.extend({ // override passed options with below 
 
      type: 'Product', 
 
      render: function() { 
 
       
 
       $(document).on('change',':input[name=PR_Type]', function(event) { 
 
        var $target = $(event.target); 
 
        product.updateObjectTypes($target.val()); 
 
        product.updateHideWhen(); 
 
       }); 
 
       $(document).on('focus', ':input[name=DocUNID]', function(){ 
 
        this.select(); 
 
       }); 
 
       
 
       ...
"render()"内の関数の宣言はそうですか?あるいは、私は-i dont know-var instance = thisのような宣言をするべきですか?いくつかの特別な場所で「this」と呼んでいますか?

コードをチェックするために彼の時間を取る皆さん、本当にありがとう、少し説明することができます:)!このよう

+1

あなたがそれらをプライベートに何を意味するのですか?関数内で定義された関数は、その関数をグローバル関数や他のメソッドを使って明示的に見ることができない限り、その関数内でしか見ることができません...本当に、それらがプライベートでない場合は、簡単な答え、その事を –

+0

しないでくださいこれはoopとは関係ありません... – passion

+0

説明のためにありがとう、私は今より良く理解し始めます! –

答えて

0

var Product = finance.entre.Model.extend((function(){ 

    function private1() {} 
    function private2() {} 

    return { 
     type: 'Product', 
     render: function() { 
       private1(); 
       private2(); 
     } 
    }; 
}())); 
+0

ありがとう@cske!私は今このようにして、もっとうまくいくようです。 –

+0

@FernandoLöpezようこそ – cske

関連する問題