0

ユーザーが編集モーダルに移動したときに選択リストに項目を表示するかどうかについて、コンテナレス フロー制御構文を使用しています。これを機能させるにはIE8に問題があるようです。私が読んでいるものから、IE8は選択のコメントを取り除きます。偉大な。

私が見るオプション

  1. 必要なリストだけを取得して、サービス層をもう一度呼び出します。
  2. 私はDoctypeをいじってみましたが、これはフレームセットを使用している古いレガシーアプリにあり、変更できません。そうしないと、サイトの他の部分が壊れます. doctype セットは次のとおりです: http-equiv="X-UA-Compatible" content="IE=EmulateIE8"
  3. おそらくノックアウトまたはjqueryからhtmlを選択リストに挿入します

最終的なリストに対して追加のサービス呼び出しを行うことなく、これをクロスブラウザーで機能させる方法はありますか?

選択リストのコードは次のとおりです

<tr>
                <td><label for="EditStatus">Status</label></td>
                <td><select id="EditStatus" class="" name="EditStatus" data-bind="value: editStatus" >
                        <option value="" selected>Select...</option>
                        <!-- ko if: editStatusCanShowActive()  -->
                        <option value="A">Active</option>
                        <!-- /ko -->
                        <!-- ko if: editStatusCanShowInactive() -->
                        <option value="I">Inactive</option>
                        <!-- /ko -->
                        <!-- ko if: editStatusCanShowHold() -->
                        <option value="H">Hold</option>
                        <!-- /ko -->
                        <!-- ko if: editStatusCanShowLocked() -->
                        <option value="L">Locked</option>
                        <!-- /ko -->
                    </select></td>
            </tr>
4

2 に答える 2

3

別のより良いオプションがあります。次のように、計算されたオブザーバブルを使用して、オプションの配列を構築します。

this.status = ko.computed(function() {
    var options = [];
    if (this.editStatusCanShowActive()) {
        options.push('Active');
    }
    if (this.editStatusCanShowInactive()) {
        options.push('Inactive');
    }
    if (this.editStatusCanShowHold()) {
        options.push('Hold');
    }
    if (this.editStatusCanShowLocked()) {
        options.push('Locked');
    }
    return options;
}, this);

この作業の例を次に示します: http://jsfiddle.net/badsyntax/8FvMR/

于 2013-09-20T14:55:57.243 に答える
0

1 つのオプションは、ビュー モデルで次のようなリストを作成することです。

this.availableStatuses = ko.computed(function() {
   var statuses = [];

    if (this.editStatusCanShowActive()) {
        statuses.push({ name: "Active", value: "A" });   
    }

    if (this.editStatusCanShowInactive()) {
        statuses.push({ name: "Inactive", value: "I" });   
    }

    if (this.editStatusCanShowHold)) {
        statuses.push({ name: "Hold", value: "H" });   
    }

    if (this.editStatusCanShowLocked()) {
        statuses.push({ name: "Locked", value: "I" });   
    }

    return statuses;

}, this);

次に、次のように UI にバインドします。

<select data-bind="options: availableStatuses, optionsText: 'name', optionsValue: 'value', value: editStatus"></select>
于 2013-09-20T14:58:38.013 に答える