點擊「添加」按鈕,數據庫的結果將被提取。 我想要這個結果在observableArray中填充或計算(爲未來計算)。我不知道如何填充可觀察數組。下面是Ajax調用從ajax調用一個observableArray調用
KNOCKOUTJS
self.addToCartViaProdList = function (item, event)
{
/*get current item index*/
/*in dom element $index() is enough but in viewModel a context is to be obtained*/
var context = ko.contextFor(event.target);
var index = context.$index();
var incQty = self.prodList()[index].ProductQty();
var prodID = self.prodList()[index].ProductID();
var verProdInCombo = ko.toJS({"prodID":prodID});
//check product in combos
$.ajax
({
url: '**************ProdID.php',
type: "post",
data: verProdInCombo,
success: function(result)
{
/*The result is in below format*/
/***************
"{"ComboName":"SinglePack","ComboItemsName":"Aloo Tikki Burger,Mango Lassi,Tomato Soup","ComboItemsID":"101_1_11,1105_11_110,901_9_90","ComboTotalPrice":"90.25"}"
********************/
},
error: function(xhr, status){
alert(xhr);
alert(status);
}
});
};
我收到的成功結果的代碼,但我所有的努力把這個數據observableArray還沒有產生任何卓見成效。
我試過將結果保存在localSession中。然後用計算的變量從localSession挑值,
然後,我曾嘗試使用ko.mapping.fromJS(結果),這因此未正常工作或
我想從服務器接收到的顯示列表在一個div如下:
HTML CODE
<div class="comboSeg" >
<div data-bind="foreach: comboDataList">
<div data-bind="text: ComboName">
</div>
<div data-bind="text: ComboItemsName">
</div>
<div data-bind="text: ComboTotalPrice">
</div>
</div>
</div>
的不同版本試圖knockoutjs的是:
VERSION 1:保存DAT一個在本地會話和使用計算
self.comboDataList = ko.computed(function()
{
var comboDataItems = [];
if (self.comboValChange() == "DO" && localStorage.getItem("comboDataItem") != null)
{
var dataSaved = localStorage.getItem("comboDataItem");
comboDataItems = ko.utils.arrayMap(dataSaved, function(item)
{
return new ComboList(item.ComboName, item.ComboItemsName, item.ComboItemsID, item.ComboTotalPrice);
});
comboDataItems.push(dataSaved);
}
return comboDataItems;
},this);
//Ajax call is as follows:
$.ajax
({
url: '***************ProdID.php',
type: "post",
data: verProdInCombo,
success: function(result)
{
localStorage.removeItem("comboDataItem");
localStorage.setItem("comboDataItem",result);
//Forcing the computed function to be called, just a workaround
self.comboValChange("");
self.comboValChange("DO");
}, //Result will contain whatever server will send back as a mesage
error: function(xhr, status){
alert(xhr);
alert(status);
}
});
版本2:力推comboDataList
獲得成功味精$.ajax
({
url: '*************ProdID.php',
type: "post",
data: verProdInCombo,
success: function(result)
{
self.comboDataList.push(result);
//Also tried below one
//self.comboDataList.push(ko.toJS(result));
}, //Result will contain whatever server will send back as a mesage
error: function(xhr, status){
alert(xhr);
alert(status);
}
});
現在我已經啓用了在瀏覽器中的denug我得到這個錯誤信息兩個版本:
錯誤:未捕獲的ReferenceError:無法處理綁定 「文本:函數(){返回} ComboName」 消息:ComboName沒有定義
你提到已經嘗試過兩種版本的'success'處理函數,但是沒有包含代碼或細節,爲什麼*它沒有工作或者它給了什麼錯誤。請包括這些,以便我們可以幫助您解決問題。 – Jeroen
你json看起來很好,在這裏查看這個示例https://jsfiddle.net/LkqTU/27832/。更多信息表示讚賞。 –
@Jeroen:我沒有得到任何錯誤。不知何故comboDataList保持空白。我想知道,在每個ajax調用之後,整個View模型會自動刷新?目前我不在辦公室。幾個小時後我會附上代碼。對不做同樣的通話抱歉。 – DashmeetSingh