0

ノックアウトの選択タグの値バインディングに問題があります。

次のマークアップがあります。

<select id="faultCode" data-bind="options: FaultCodes, optionsText: 'Description', value: FaultCode, optionsCaption: 'Choose a Fault Code'"></select>
<select id="causeCode" data-bind="options: CauseCodes, optionsText: 'Description', value: CauseCode, optionsCaption: 'Choose a Cause Code'"></select>
<select id="serviceAction" data-bind="options: ActionCodes, value: ActionCode, optionsText: 'Description', optionsCaption: 'Choose an Action Code'"></select>
<select id="plantClass" data-bind="options: PlantClasses, value: PlantClass, optionsText: 'Description', optionsCaption: 'Choose a Plant Class'"></select>
<select id="plantItem" data-bind="options: PlantItems, value: PlantItem, optionsText: 'Description', optionsCaption: 'Choose a Plant Item'"></select>

そして私のJavascript:

self.FaultCode = ko.observable();
self.ActionCode = ko.observable();
self.PlantClass = ko.observable();
self.PlantItem = ko.observable();
self.CauseCode = ko.observable();

self.FaultCodes = ko.observableArray();
self.ActionCodes = ko.observableArray();
self.PlantClasses = ko.observableArray();
self.PlantItems = ko.observableArray();
self.CauseCodes = ko.observableArray();

self.closeRequest = function () {
    var fault = "";
    var action = "";
    var cause = "";
    var pc = "";
    var pi = "";
    if (self.FaultCode() != undefined) {
        fault = self.FaultCode();
    }
    if (self.ActionCode() != undefined) {
        action = self.ActionCode();
    }
    if (self.CauseCode() != undefined) {
        cause = self.CauseCode();
    }
    if (self.PlantClass() != undefined) {
        pc = self.PlantClass();
    }
    if (self.PlantItem() != undefined) {
        pi = self.PlantItem();
    }
}

ユーザーが 5 つの選択ボックスすべてからオプションを選択して closeRequest 関数を起動すると、FaultCode オブザーバブルの値は "" (空の文字列) になり、CauseCode オブザーバブルの値は undefined になります。他の 3 つの値オブザーバブルはすべて、値として正しいオブジェクトを持っています。

4

1 に答える 1

0

closeRequest などを入力するときに、FaultCode に値があると確信していますか?

 console.log(self.FaultCode());

あなたが最初にその機能に入ったとき。(self.FaultCode() != undefined)また、どちらが大まかな比較であり、あまり良くないかを言っています。上記の console.log ステートメントからログに記録された値を取得している場合は、これで修正されるはずです -

self.closeRequest = function () {
    console.log(self.FaultCode());
    var fault = "";
    var action = "";
    var cause = "";
    var pc = "";
    var pi = "";
    if (self.FaultCode()) {
        fault = self.FaultCode();
    }
    if (self.ActionCode()) {
        action = self.ActionCode();
    }
    if (self.CauseCode()) {
        cause = self.CauseCode();
    }
    if (self.PlantClass()) {
        pc = self.PlantClass();
    }
    if (self.PlantItem()) {
        pi = self.PlantItem();
    }
}

falseオブザーバブルが、undefined、でない限り""、またはnullオブザーバブルに等しいフォルトを設定します。

値を大まかに比較している二重等号を使用する場合は、型の比較にも三重等号を使用してください。

于 2013-10-07T22:04:58.527 に答える