2013-07-09 69 views
0

我有一個select,並且在選擇更改時嘗試顯示屬性(當選擇了捐贈類型時,我想顯示更長的捐贈說明類型)。不幸的是,它不工作。我看不到要訪問視圖模型的selectedDonation屬性的屬性。無法從選擇的值綁定中讀取屬性

我有a fiddle這應該有助於說明我正在嘗試做什麼。這是我第一次嘗試將knockout.js合併到一個項目中,所以請原諒初學者的錯誤。

我選擇這個樣子的:

<select data-bind="options: availableDonationTypes, optionsCaption: 'Please select...', value: selectedDonation.donationType, optionsText: 'label'"></select> 

我想在這裏展示的描述,但三元表達式始終計算爲false。我究竟做錯了什麼?

<span data-bind="text: selectedDonation() ? selectedDonation().donationType().description : 'No type selected'"></span> 

如果我使用selectedDonation代替selectedDonation()作爲測試,表達式的計算結果爲真,但我仍然無法找到一種方法來訪問所選擇的捐贈類型的描述。

我的視圖模型和對象:

function Donation(donationType, donationAmount) { 
    var self = this; 
    self.donationAmount = donationAmount; 
    self.donationType = ko.observable(donationType); 

    self.formattedAmount = ko.computed(function() { 
     var amount = self.donationAmount; 
     return amount ? "$" + amount.toFixed(2) : "None"; 
    }); 
} 

function DonationsViewModel() { 
    var self = this; 

    self.availableDonationTypes = [{ 
     label: "Donation 1", 
     description: "This is donation number 1." 
    }, { 
     label: "Donation 2", 
     description: "This is donation number 2." 
    }]; 

    self.selectedDonation = ko.observable(); 

    self.donations = ko.observableArray([ 
    new Donation(self.availableDonationTypes[0], 50), 
    new Donation(self.availableDonationTypes[1], 75)]); 

    self.totalDonation = ko.computed(function() { 
     var total = 0; 
     for (var i = 0; i < self.donations().length; i++) 
     total += self.donations()[i].donationAmount; 
     return total; 
    }); 

    self.addDonation = function (form) { 
     self.donations.push(new Donation(self.selectedDonation.donationType, parseInt(self.selectedDonation.donationAmount))); 
    } 
    self.removeDonation = function (donation) { 
     self.donations.remove(donation); 
    } 
} 
+0

你的問題是,'selectedDonation'開始時如無物。你不能將下拉列表的'value'綁定到'dontationType'屬性上:沒有這樣的屬性。 'selectedDonation'需要成爲'donation'對象。 – Tyrsius

+0

這是一個修復第一個綁定的小提琴,但是如果你選擇了它的標題,它會中斷,因爲這樣做會將'value'設置爲null,它沒有'description'屬性:http://jsfiddle.net/xUn9N/1/ – Tyrsius

+0

啊,這很有道理。然而,看着你的jsFiddle,所做的更改在添加捐贈時會破壞功能。請注意如何添加一行而不顯示任何值(除去刪除鏈接)。 –

回答

1

你的問題是,selectedDonation開始時如無物。您無法將下拉列表的值綁定到dontationTypee property of nothing: it doesn't have such a property. selected捐贈對象的needs to be a

下面是使用這個方法最終小提琴:http://jsfiddle.net/xUn9N/3/

相關問題