Проверен нокаут - привязка к строковому литералу - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть данные, хранящиеся в парах «имя / значение» со связанным типом данных (текст, флажок, пароль и т. Д.)*

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

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

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

ОБНОВЛЕНИЕ: Данные по существу в следующем формате

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

Ответы [ 3 ]

1 голос
/ 06 февраля 2012

Вы можете добавить вычисленное значение к вашей модели представления, см. 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 голосов
/ 23 августа 2016

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

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

С http://knockoutjs.com/documentation/checked-binding.html:

Дополнительные параметры

  • CheckedValue

Если ваша привязка также включает в себя selectedValue, это определяет значение используется проверенной привязкой вместо атрибута value элемента. Это полезно, если вы хотите, чтобы значение отличалось от строка (например, целое число или объект), или вы хотите установить значение динамически.

0 голосов
/ 06 февраля 2012

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

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

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

<input type="checkbox" data-bind="checked: isTrue($root.Value)">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...