2012-08-17 159 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:值」