1

我正在使用淘汰赛 JS 模板来显示控件。但复选框始终显示为已选中。下面我将 ActualValue 属性绑定到复选框,这是一个字符串属性。

jQuery 模板

<script type="text/x-jquery-tmpl" id="membershipMetaDataTemplate">
<tr>
    <td><span data-bind="text: DisplayName" ></span></td>
    {{if ObjectType() == 'string'}}
        <td><input type="text" data-bind="value: ActualValue, disable: ReadOnly" />
    {{/if}}

    {{if ObjectType() == 'boolean'}}
        <td><input type="checkbox" data-bind="checked: ActualValue, disable: ReadOnly" /></td>
    {{/if}}

    {{if ObjectType() == 'dropdown'}}
          <td><select data-bind="options: PermittedValues, value: ActualValue, disable: ReadOnly, optionsCaption: 'Choose...'"/></td>
    {{/if}}

</tr>

谢谢

4

2 回答 2

3

在 JavaScript 中试试这个:

alert(new Boolean("true"));
alert(new Boolean("false"));
alert(new Boolean(""));

前两个显示,第三个显示。这是因为,在 JavaScript 中,任何非空字符串都会转换为布尔值true

在您的示例中,听起来您正在将字符串传递"false"给复选框。由于该字符串"false"是非空字符串,它具有布尔值true,因此复选框被勾选。

对此的一种解决方案是定义一个可写的计算 observable"true",它将字符串"false"转换为预期的布尔值:

var viewModel = {
    ActualValue: ko.observable("false")
};

viewModel.ActualValueAsBoolean = ko.computed({
    read: function () { return this.ActualValue() === "true"; },
    write: function (newValue) { this.ActualValue(newValue ? "true" : "false"); },
    owner: viewModel
});

ko.applyBindings(viewModel);

然后将检查绑定到ActualValueAsBoolean而不是ActualValue.

于 2012-08-17T12:41:22.993 回答
3

我有一个实例,我正在映射一个 ajaxed 的 JSON 对象数组,因此它使创建计算的可观察变量变得混乱。

对于这种情况,我发现自定义活页夹不那么突兀。

这是我用的-

ko.bindingHandlers.stringToBool = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext)     {

        var value = valueAccessor();
        var val = value().toLowerCase() === 'true';
        $(element).prop('checked', val);
        ko.utils.registerEventHandler(element, "change", function () {
            var observable = valueAccessor();
            observable($(element).prop('checked'));
        });
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel,    bindingContext) {



    }
};

然后你使用这个而不是库存检查绑定来绑定


输入类型=“复选框”数据绑定=“字符串ToBool:值”

于 2012-12-12T02:18:59.263 回答