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あなたはmemberBalanceの内側international変数の計算を配置する必要がありモデル

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

を表示しています。今、あなたは一度だけ、それを計算され、その後memberBalanceは

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); 

がEDIT同じinternational値を使用している:あなたがソースを表示したり、生成されたHTMLを見ると は、あなたがdata-bind文がためにそこだけではないことがわかりますチェックボックス。あなたが使用する必要がhttp://cpratt.co/html-editorfor-and-htmlattributes/

構文は次のとおりです:

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

注htmlAttributesプロパティを持つラッパーオブジェクト。問題が

はポストを参照してくださいなど、@Html.EditorFor@Html.CheckBoxFor異なるパラメータを持っていること@Html.TextBoxForです

+0

hmmm、まだ動作していないようです。 @Voyta、私に含める必要がある更新バインディングはありますか?テキストボックスの場合、 'valueUpdate: 'afterkeydown''を入れます。チェックボックスにも同様のバインディングがありますか? – Jand

+0

更新された回答を参照 – Voyta

+0

それは働いた!ありがとうございました! – Jand

関連する問題