我有一個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);
}
}
你的問題是,'selectedDonation'開始時如無物。你不能將下拉列表的'value'綁定到'dontationType'屬性上:沒有這樣的屬性。 'selectedDonation'需要成爲'donation'對象。 – Tyrsius
這是一個修復第一個綁定的小提琴,但是如果你選擇了它的標題,它會中斷,因爲這樣做會將'value'設置爲null,它沒有'description'屬性:http://jsfiddle.net/xUn9N/1/ – Tyrsius
啊,這很有道理。然而,看着你的jsFiddle,所做的更改在添加捐贈時會破壞功能。請注意如何添加一行而不顯示任何值(除去刪除鏈接)。 –