2012-08-17 86 views
0

我正在使用knockout 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> 

感谢

回答

3

在JavaScript试试这个:

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

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

在你的例子中,它听起来像是你将字符串"false"传递给复选框。由于字符串"false"是一个非空字符串,因此其布尔值为true,因此该复选框会被打勾。

一种解决方法是定义一个writeable computed 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

3

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

对于这种情况,我发现一个自定义粘合剂是不那么突兀。

这是我used-

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



    } 
}; 

然后绑定使用它来代替股票被查结合


输入类型= “复选框” 数据绑定= “stringToBool:值”