2012-04-27 18 views
0

私は非常にjavascriptに新しく、私はアプリケーションで使用するためにknockooutjsライブラリを研究しています。私はいくつかの方法で名前空間とビューモデルを宣言しました。私がOnTemplateChangeを呼び出すまで、すべてが期待どおりに機能しています。その後、addIpメソッドとremoveIpメソッドはそれ以上動作しません。範囲外のJavascriptメソッド

私は別のファイルに名前空間を宣言した:

var omega = omega || {}; 

これは、別のファイルの私のviewmodelためのコードです。私はFranchiseDataコントローラーからJsonデータを取得しており、マッピングプラグインを使用してviewmodelの観測可能なプロパティーを作成しています。

$(function() { 
    omega.franchiseInfo = {} 

    $.getJSON("FranchiseData", function (data) { 
     //using the mapping plugin 
     omega.franchiseInfo = ko.mapping.fromJS(data); 
     //declare an observable array for some custom logic to handle when json data is received from the server 
     omega.franchiseInfo.Ips = ko.observableArray([]); 

     if (data.ServerIps.length === data.ServerPorts.length) { 
      for (var i = 0; i < data.ServerIps.length; i++) { 
       omega.franchiseInfo.Ips.push({ ip: ko.observable(data.ServerIps[i]), port: ko.observable(data.ServerPorts[i]) }); 
      } 
     } 
     ko.applyBindings(omega.franchiseInfo); 
    }); 

    onTemplateChange = function (value) { 
    var template = $("#networks :selected").val(); 
    $.getJSON("FranchiseData", { network: template }, function (data) { 
     omega.franchiseInfo = ko.mapping.fromJS(data); 
     omega.franchiseInfo.Ips = ko.observableArray([]);   
} 

save = function() { 
    $.ajax({ 
     url: "/Home/Save", 
     type: "POST", 
     //data: ko.toJSON({ folderName: FolderName }), 
     data: ko.toJSON(this), 
     contentType: "application/json; charset=utf-8", 
     dataType: 'json', 
     success: function (result) { alert("result") } 
    }); 
} 

addIp = function() { 
    if (omega.franchiseInfo.Ips().length < 10) { 
     omega.franchiseInfo.Ips.push({ ip: ko.observable(), port: ko.observable() }); 
    } 

} 

removeIp = function() { 
    if (omega.franchiseInfo.Ips().length > 1) { 
     omega.franchiseInfo.Ips.pop(); 
    } 
} 
)} 

onTemplateChange方法は、私は、ページの読み込みの最初のJSON呼び出しから観察可能なメソッドを使用することはできませんよと私は再びマッピングをやっていると呼ばれています。さらに、addIpとremoveIpは動作しなくなりました。スコープに問題があり、マッピングを2回行うのは間違っていると思います。

私はこのようなfranchiseInfoビューモデルのメソッドを宣言しようとした場合

omega.franchiseInfo = { 
     Ips: ko.observableArray([]) 
    }; 

IPS配列が$.getJSON("FranchiseData", function (data)スコープ内で定義されていません。

ご協力いただきますようお願い申し上げます。私はこれに非常に固執しています。何か不明な点があれば、私はさらに説明をします。ありがとうございました。

答えて

0

$ .getJSON(私のように終わると期待します)または}};

はまた、あなたが既にobservableArray

としてomega.franchiseInfo.Ipsを宣言し、なぜドントあなたはそれがこの omega.franchiseInfo.Ips([])

のように空にします