0

我是新來的淘汰賽js和感覺我可能不會理解這裏的東西。我基本上有一個MVC複選框,選中時會更新另一個依賴於其他字段計算的字段。除了複選框之外,我可以獲取總金額字段以更新所有其他字段,並且我不確定我做錯了什麼。我懷疑這是因爲我沒有傳入self,但我不確定我如何在最終等式中將條件值傳遞給它,但我不確定爲什麼會出現這種情況。也許有人可以對此有所瞭解。複選框沒有更新價值淘汰賽js

我還注意到,如果我將變量計算到變量中並返回最終變量,則初始值將正確顯示,但是最終沒有任何內容會使最終字段更新。是有原因的,或者我做錯了什麼?

這裏是我使用

<div class="form-group-sm"> 
    <label for="bookingType">International Property</label> 
    <div class="checkbox"> 
     @Html.EditorFor(model => model.IsInternationalProperty, new { @id = "internationalProperty", @value = true, @data_bind = "checked: internationalProperty" }) 
     <label style="width: 200px; text-align: left">Select if it is outside the US</label> 
    </div> 
</div> 

而且這裏的複選框標記是我knockoutjs查看模型

var viewModel = function (data) { 
    var self = this; 
    self.internationalProperty = ko.observable(); 
    self.vendorBookingAmount = ko.observable(2.00); 
    self.transactionFeesDue = ko.observable(0.00); 
    self.transactionFeesWaived = ko.observable(0.00); 
    self.iceBookingFees = ko.observable(0.00); 
    self.vacationCashRedeemed = ko.observable(0.00); 
    self.pointsDiscount = ko.observable(0.00); 
    debugger; 
    var international = (self.internationalProperty() == true) ? 0.05 : 0; 

    self.memberBalance = ko.computed(function() { 
     return (Number(self.vendorBookingAmount()) + Number(self.transactionFeesDue()) - 
      Number(self.transactionFeesWaived()) + Number(self.iceBookingFees()) - 
      Number(self.vacationCashRedeemed()) - Number(self.pointsDiscount())) + 

      (Number(self.vendorBookingAmount()) + Number(self.transactionFeesDue()) - 
      Number(self.transactionFeesWaived()) + Number(self.iceBookingFees()) - 
      Number(self.vacationCashRedeemed()) - Number(self.pointsDiscount()))*international; 
    }, self); 
}; 

ko.applyBindings(new viewModel()); 

回答

1

你需要把international變量的計算memberBalance內。現在你正在計算它只有一次,然後memberBalance使用相同的international

self.memberBalance = ko.computed(function() { 
     var international = (self.internationalProperty() == true) ? 0.05 : 0; 
     return (Number(self.vendorBookingAmount()) + Number(self.transactionFeesDue()) - 
      Number(self.transactionFeesWaived()) + Number(self.iceBookingFees()) - 
      Number(self.vacationCashRedeemed()) - Number(self.pointsDiscount())) + 

      (Number(self.vendorBookingAmount()) + Number(self.transactionFeesDue()) - 
      Number(self.transactionFeesWaived()) + Number(self.iceBookingFees()) - 
      Number(self.vacationCashRedeemed()) - Number(self.pointsDiscount()))*international; 
    }, self); 

編輯: 如果您查看源代碼,看看你生成的HTML,你會看到data-bind說法是不存在的複選框。問題是,從@Html.EditorFor@Html.CheckBoxFor@Html.TextBoxFor等都有不同的參數

看帖子:http://cpratt.co/html-editorfor-and-htmlattributes/

你需要使用的語法爲:

@Html.EditorFor(model => model.IsInternationalProperty, new { htmlAttributes = new { @id = "internationalProperty", @value = true, @data_bind = "checked: internationalProperty" } }) 

注意與htmlAttributes屬性包裝對象。

+0

嗯,它似乎仍然沒有工作。 @Voyta,是否有我需要包含的更新綁定?我知道對於放置'',valueUpdate:'afterkeydown'的文本框,可能有類似的複選框綁定? – Jand

+0

查看最新的答案 – Voyta

+0

It works!不知道我是否會想出來,謝謝! – Jand