2016-05-13 4 views
-1

私は次のような構造JSの名前空間と変数のスコープ

myns.controllers.home = { 
    init = function(){ 
    }, 
    doSomething: function(){ 
     var cars = 100; // simple example 
     var url = 'someurl'; 
     myns.ajaxHelper.execute(url, { id: id }, myns.controllers.home.jobUtils.callback); 
    } 
} 
myns.controllers.home.jobUtils.callback = function (cars) { 
    alert(cars.lenght); // cars is undefined?  
} 

とのようなカスタムのjavascriptの名前空間を持っている場合は車の変数は、ここで定義されていないと、どのようにリファクタリング/この問題を解決するだろう、なぜ?

+0

はい、どうしてこの問題はどうですか? – user1765862

+0

あなたは 'lenght'プロパティをチェックしていますが、' car'は 'Number'で' length'を持っていません。[fiddle](https://jsfiddle.net/p5z2gjup/)はよく見えます –

+0

私はその長さの間違いを犯しました。前にそれを掃除することを忘れていたが、車は未定義であるため、基本的に何も変わらない。 – user1765862

答えて

1

私はnsのプロパティとして変数を宣言試してみた:

myns.controllers.home = { 
    cars: 100, 
    init: ... 
+0

グローバル変数を使用します。 – user1765862

0
myns.ajaxHelper.execute(url, { id: id }, myns.controllers.home.jobUtils.callback()); //for executing a function 

var cars = 100; // simple example 
myns.ajaxHelper.execute(url, { id: id }, myns.controllers.home.jobUtils.callback(cars)); //to pass a variable into a function 

私はあなたが欠場と思う「()」のオープンとクローズブラケット機能

0

を実行するときにそれが何を完全には明らかではありませんあなたは尋ねていますが、これが役に立ちそうです:

ローカルのcarsの値をキャプチャするより良いコールバック関数を作成すると、次のようになります。

myns.ajaxHelper.execute(url, 
         { id: id }, 
         function(data){ 
         myns.controllers.home.jobUtils.callback(data, cars) 
         }); 

その後、としてあなたのコールバックを定義します:100の値がlengthは私には不明であるかもしれないものの、非常にどのように

myns.controllers.home.jobUtils.callback = function (data, cars) { 
    alert(cars.lenght); // cars is undefined?  
} 

。たぶん私は誤解しました。

関連する問題