无容器流控制语法选择在IE8中不起作用

时间:2013-09-20 14:35:54

标签: jquery knockout.js cross-browser ie8-browser-mode

我正在使用无容器流控制语法,以确定当用户进入编辑模式时是否应该在选择列表中显示项目。我似乎在使用IE8时遇到了麻烦。从我一直在阅读的IE8中删除了select中的注释。大。

我看到的选项

  1. 再次调用服务层获取列表I. 需要。
  2. 我试过弄乱了doctype,但这是坐在一个 使用框架集的旧遗留应用程序,我无法更改它或它 将破坏网站的其他部分。 doctype集是: http-equiv =“X-UA-Compatible”content =“IE = EmulateIE8”
  3. 以某种方式将html注入选择列表中,可能来自knockout或jquery
  4. 有没有办法让这个跨浏览器工作而不必为最终列表进行额外的服务调用?

    这是我的选择列表代码

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

2 个答案:

答案 0 :(得分:3)

还有另一种更好的选择。使用计算的observable来构建选项数组,如下所示:

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/

答案 1 :(得分:0)

一种选择是在视图模型中构建一个列表,如:

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

然后,在您的用户界面中绑定,如:

<select data-bind="options: availableStatuses, optionsText: 'name', optionsValue: 'value', value: editStatus"></select>