2012-11-29 24 views
2

我得到的「無法錯誤解析綁定的ReferenceError:‘calculateTotalPrice’是不確定的; 綁定值:點擊:calculateTotalPrice數據綁定的按鈕點擊函數給出錯誤與淘汰賽

下面是我簡單的代碼片段

<div style="background-color:black; color:white; overflow:scroll; height:350px;width:300px" id="pricesku"> 
<span id="total" data-bind="text: totalCost"></span> 
<ul data-bind="foreach: price_quantity" style="list-style-type:none;"> 
<li>     
<button data-bind="click: calculateTotalPrice(price)">CLICK THIS TO UPDATE TOTAL</button>     
</li>    
</ul> 
</div> 

但是,當我這樣做,單擊並提供函數名,獲得上述錯誤。

這是我的看法莫代爾

功能ViewPriceObjectOnWeb(d){

this.price_quantity = ko.observableArray(d); 
this.totalCost = ko.observable(100); 
this.calculateTotalPrice = function (p) { 
var tp = this.totalCost() + p; 
//$('#total').text(tp); 
} 

}

和文件準備好我讓Ajax調用,從服務器帶來的數據(這工作正常),如下

$(document).ready(function() { 
var sku = "abcd"; 
$.ajax({ 
    url: "/api/values?clientSKU=" + sku, //this would give SKU/Price collection as JSON Serialized object from .NET/Server Side 
    dataType: "json", 
    asyc: false, 
    type: "get", 
    success: function (msg) { 
    var skuandprice = $.parseJSON(msg);   
    ko.applyBindings(new ViewPriceObjectOnWeb(skuandprice), document.getElementById('pricesku')); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
    alert(textStatus + ' ' + errorThrown); 
    } 
    }); 
}); 

誰能幫助我我在這裏做錯了什麼(我打賭我是)? Thx提前。

回答

2

當您在foreach循環中時,Knockout期望在數組條目中定義數據綁定中的任何函數或屬性,在這種情況下,這些值是price_quantity中的值。要訪問保存該數組的對象中定義的函數和屬性,請使用$parent標識符。因此,要使用calculateTotalPrice你的循環裏面,你需要做的:

<li>     
    <button data-bind="click: $parent.calculateTotalPrice">CLICK THIS TO UPDATE TOTAL</button>     
</li> 

視圖模型:

function ViewPriceObjectOnWeb(d) { 
    var self = this; 
    self.price_quantity = ko.observableArray(d); 
    self.totalCost = ko.observable(100); 
    self.calculateTotalPrice = function (p) { 
     var tp = self.totalCost() + p; 
     self.totalCost(tp); 
    }; 
} 

工作示例(使用硬編碼的價格):http://jsfiddle.net/jonhopkins/fn7vc/2/

+0

Jonh你能拋出一些光(它不會給我錯誤,但是)1.爲什麼我的SPAN沒有得到與價格更新當我點擊按鈕更新(按鈕在列表中,任何按鈕可以點擊)。我很感謝你的幫助。 – Bhagirath

+0

如果你沒有改變'calculateTotalPrice'內的代碼,那是因爲它目前不更新'this.totalCost'。在函數的第一行之後,添加另一行'this.totalCost(tp);'它應該更新你的SPAN – jonhopkins

+0

Jonh,我添加了這個但仍然當我單擊「單獨按鈕」時它不更新SPAN值。跨頁面值在頁面加載時更新,然後從不更新按鈕點擊次數。 – Bhagirath