2012-08-28 20 views
2

有一個去與Knockout玩,我推到一個可觀察數組有問題。我下面的代碼通過點擊按鈕從服務器獲取一些json數據,它返回一個對象數組。第一個console.log控制檯很好,我有我的陣列的對象很好,丹迪。基因敲除observableArray push - 不推送到數組

但是,我似乎無法將每個對象推到我的可觀察數組上。控制檯顯示空數組。我嘗試了幾種變化,但感覺我只是想念一些簡單的東西,但我很難追蹤它。

我想要做的是從服務器加載一些數據,把它放在一個可觀察的數組中,我可以綁定到一個模板,並做一些像foreach一樣的東西來輸出數組的內容。

$(function() { 
    $('#load').click(function() { 
     $.getJSON('/PreferredDrugList/service/preferredDrugs/y', function(data) { 
      $(data.preferredDrugs).each(function(index, obj) { 
       console.log(obj); 
       $('#result').append('<p>' + (++index) + ') ' + obj.drugName + ' : ' + obj.dosageFormDesc + '</p>'); 

       myViewModel.drugList.push(obj); 
       console.log(myViewModel.drugList); 
      }); 
     });//end getJSON 
    });//end load 

});//end ondomready 

var myViewModel = { 
    drugList: ko.observableArray() //list of drug names 
}; 

ko.applyBindings(myViewModel); 
+1

你可能的意思是'console.log(myViewModel.drugList());' –

+0

在這方面似乎沒有什麼區別,仍然得到空陣列安慰。 –

+0

垃圾,我的壞,肯定是緩存問題,它似乎現在工作!現在我只需要弄清楚如何讓我的foreach:drugList渲染。 –

回答

2

在下面請看:http://jsfiddle.net/qszZD/

您在您的評論,你需要讓你的foreach工作如上所述。希望這對你來說是一個好的開始。我使用的是幾件事情,您可能會或可能不想照顧:

knockoutJS.mapping

我使用可選的mappingOptions定義基於該數據從映射庫返回計算的觀測。通過使用KO映射,避免需要手動將元素推送到可觀察數組中,映射庫將自動爲您處理,並使您能夠通過提供映射選項來創建更多計算字段,進一步擴展模型。

讓我知道如果您有任何問題。