2016-06-27 17 views
-1

2つの外部JavaScriptファイルがあり、1つは "名前空間"のように設定されていて、もう1つのファイルはそれを呼び出しています。ここで「名前空間」JavaScriptファイル内の関数がドロップダウンリストに入力されないのはなぜですか?

は私の "名前空間" はここで

var GlobalScript = { 
    GetAllStates: function() { 
     $.ajax({ 
      type: "GET", 
      url: URLParam.GetStatesForDropdown, 
      contentType: "application/json; charset=utf-8", 
      success: function (data, textStatus, jqXHR) { 
       ShowStates(data); 
      } 
     }) 

    }, 
    ShowStates: function (stateData) { 
     $("#acVendorState").kendoDropDownList({ 
      dataSource: stateData, 
      dataTextField: "StateName", 
      dataValueField: "StateID", 
      animation: false, 
      optionLabel: { 
       StateName: "-- Select State --" 
      } 
     }); 
    } 
} 

はGetAllStates()関数を呼び出しているスクリプトであるように、

$(document).ready(function() { 
    GlobalScript.GetAllStates(); 
}); 

は今、これがあれば、しかし、動作しませんどのように見えるかです"名前空間"ファイルを次のようにしてください。

function ShowStates(stateData){ 
$("#acVendorState").kendoDropDownList({ 
     dataSource: stateData, 
     dataTextField: "StateName", 
     dataValueField: "StateID", 
     animation: false, 
     optionLabel: { 
      StateName: "-- Select State --" 
     } 
    }); 
} 

var GlobalScript = { 
     GetAllStates: function() { 
      $.ajax({ 
       type: "GET", 
       url: URLParam.GetStatesForDropdown, 
       contentType: "application/json; charset=utf-8", 
       success: function (data, textStatus, jqXHR) { 
        ShowStates(data); 
       } 
      })  
     } 
    } 

次に、ドロップダウンリストを持つ私のビューに表示されます。

私の質問は、私が最初のやりかたのやり方で動作させる方法ですしている。

+0

あなたのjsの中でこのコードを試してみてくださいする必要があり、あなたは ')成功コールバックでデバッガを配置し、必ず' ShowStates(への呼び出しと判断しています実際に働いていますか? – arjabbar

+0

@ p.s.w.g、typoe – Chris

+1

JavaScriptでは、これはコンストラクタ関数では伝統的で、大文字で始まる名前のコンストラクタ関数のみです。 – Quentin

答えて

1

ShowStatesは変数ではありません。 GlobalScriptに割り当てられたオブジェクトのプロパティです。

ShowStates(data);GlobalScript.ShowStates(data);

+0

これはうまくいきました...だから、私はGlobalScript内から関数を呼び出すことを理解しているので、常に名前空間と関数を使う必要がありますか? – Chris

+0

または他の参照を参照してください。 – Quentin

+1

@Chrisあるいは '$ .ajax()'呼び出しの外側の変数に 'this'参照を保存し、それを使って他の関数を参照することができます。変数名 'GlobalScript'を使うのは少し壊れやすいです。 – Pointy

0

あなたの最初の例では

var GlobalScript = { 
    GetAllStates: function() { 
     var self = this; // <= self object created 
     $.ajax({ 
      type: "GET", 
      url: URLParam.GetStatesForDropdown, 
      contentType: "application/json; charset=utf-8", 
      success: function (data, textStatus, jqXHR) { 
       self.ShowStates(data); 
      } 
     }) 

    }, 
    ShowStates: function (stateData) { 
     $("#acVendorState").kendoDropDownList({ 
      dataSource: stateData, 
      dataTextField: "StateName", 
      dataValueField: "StateID", 
      animation: false, 
      optionLabel: { 
       StateName: "-- Select State --" 
      } 
     }); 
    } 
} 
+0

クエンティンは最初に答えました。私はあなたの答えを役に立つとマークしました。 – Chris

関連する問題