2012-02-05 4 views
0

У меня есть данные, хранящиеся в пар имя/значение с соответствующим типом данных (текст, флажок, пароль и т.д.)Нокаут проверил - привязку к строкового литерала

Я пытаюсь использовать нокаут, чтобы связать проверенное атрибут как так

<input type="checkbox" data-bind="checked: $root.Value"> 

Моя проблема заключается в том, что значения приходят в виде строковых литералов, поэтому вместо того, чтобы значение (истина), я понимаю, как это («истина») .. который независимо от «истинного»/"false", он автоматически помечает его как истинный.

Я хотел бы иметь возможность запускать простую функцию, которая проверяет, является ли она «истинным»/«ложным», и если так возвращать логическое значение обратно, то нокаут будет правильно связываться.

любые предложения?

UPDATE: Данные в основном в следующем формате

{ 
     "ID": 276, 
     "Name": "DefaultIsCallToOrder", 
     "Value": "false", 
     "Sequence": 7, 
     "DataType": "checkbox", 
    }, 
    { 
     "ID": 277, 
     "Name": "DefaultIsFeatured", 
     "Value": "false", 
     "Sequence": 8, 
     "DataType": "checkbox", 
    }, 
+0

Можете ли вы дать какие-либо ссылки о том, как работает этот подход (я имею в виду выражение данных привязку = "Проверила: $ root.Value")? я буду очень благодарен вам. –

ответ

0

Если я правильно Вас понял, Вы можете просто создать JavaScript-функцию, которую вы называете, чтобы сделать сравнение:

<script type="text/javascript"> 
function isTrue(val) { 
    return (val === "true"); 
} 
</script> 

И то вы вносите изменения в свой адрес, чтобы выглядеть так:

<input type="checkbox" data-bind="checked: isTrue($root.Value)"> 
+1

Это работало для начальной загрузки страницы .. он будет правильно проверять или снимать флажок в зависимости от значения. Однако он не привязан ... если я проверяю или снимаю флажок, значение остается таким же, как и значение загрузки начальной страницы. – afreeland

1

Вы можете добавить вычисленное значение t о вашей модели зрения см jsFiddle:

<input type="checkbox" data-bind="checked: isChecked()" /> My check box <br/> 

function AppViewModel(someValue) { 
    this.checkBoxValue = someValue; 
    this.isChecked = ko.computed(function() { 
     return this.checkBoxValue == "true"; 
    }, this); 
} 

ko.applyBindings(new AppViewModel("true")); 

В качестве альтернативы вы можете, конечно, сравнивать непосредственно со строковым значением в вашей точки зрения, это свело бы цель разделения зрения от модели представления хотя:

<input type="checkbox" data-bind="checked: checkBoxValue=='true'" /> My checkbox is here 
+0

Я получаю следующее сообщение об ошибке: «Ошибка: невозможно разобрать привязки. Сообщение: ReferenceError: isChecked не определено; Значение привязки: checked: isChecked()« – afreeland

+0

@afreeland: вы добавили функцию «isChecked» в свою модель просмотра? Проверьте jsFiddle для рабочего примера – BrokenGlass

+0

Моя модель просмотра первоначально выглядит так: var json = $ ('# data'). Html(); var o = $ .parseJSON (json); var viewModel = o; ko.applyBindings (viewModel); – afreeland

0

Там теперь более простой способ, чем создать свойство на вашей модели представления, используя checkedValue связывания (добавлено в версии 3.0):

<input type="checkbox" data-bind="checked: $root.Value, checkedValue: 'true'" /> 

От http://knockoutjs.com/documentation/checked-binding.html:

Additional parameters

  • checkedValue

If your binding also includes checkedValue, this defines the value used by the checked binding instead of the element’s value attribute. This is useful if you want the value to be something other than a string (such as an integer or object), or you want the value set dynamically.

Смежные вопросы