JsViews: каков синтаксис для привязки данных к ‹select› ‹option›?

var app = {
    selections: {
        things: [
            { Name: "name1", Value: "thingValue1" },
            { Name: "name2", Value: "thingValue2" },
            { Name: "name3", Value: "thingValue3" }
        ],
        places: [
            { Name: "place1", Value: "placeValue1" },
            { Name: "place2", Value: "placeValue2" },
            { Name: "place3", Value: "placeValue3" }
        ]
    },
    formData: {
        selectedThing: "thingValue1",
        selectedPlace: "placeValue1"
    }
};

var template = $.templates("#theTmpl");

template.link("#content", app);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="http://www.jsviews.com/download/jsviews.js"></script>


<div id="content"></div>

<script id="theTmpl" type="text/x-jsrender">
    <select id="thingChoice" data-link="formData.selectedThing">
        <option value="-">Please select</option>
        {^{for selections.things}}
        <option data-link="{value{:Value} text{:Name}} selected{:formData.selectedThing}}"></option>
        {{/for}}
    </select>
    <select id="placeChoice" data-link="formData.selectedPlace">
        <option value="-">Please select</option>
        {^{for selections.places}}
        <option data-link="{value{:Value} text{:Name}} selected{:formData.selectedPlace}}"></option>
        {{/for}}
    </select>
</script>

В этом jsfiddle я пытаюсь отделить свои несколько списков элементов от структуры данных, которую я буду отправлять на сервер: http://jsfiddle.net/hdra2e2d/1/

Вот проблема: только первый элемент имеет текст в раскрывающемся списке выбора! Похоже, все подключено правильно, хотя я не нашел суперпростых или кратких примеров привязки данных к элементу формы SELECT html, так что, возможно, я что-то пропустил, когда пытался согнуть ближайшее возможное совпадение?

справочная информация: цель состоит в том, чтобы получить доступные элементы для нескольких раскрывающихся списков в виде JSON и поместить их в дискретные массивы словарей в элементе «app.selections», связать их с данными и сохранить выбранные пользователем значения в «приложении». .formData», который я буду отправлять на сервер как JSON.


person Brian Hinckle    schedule 21.10.2015    source источник
comment
Мне любопытно, где вы нашли такой синтаксис для выражения канала передачи данных ‹option›? Кстати, я обновил ваш заголовок, чтобы другие могли найти этот вопрос/ответ. Смотрите мой ответ ниже...   -  person BorisMoore    schedule 22.10.2015


Ответы (1)


Ваш синтаксис для

<option data-link="{value{:Value} text{:Name}} selected{:formData.selectedThing}}"></option>

очень странно. Откуда это пришло? Похоже, вы использовали тот же ошибочный синтаксис, что и в этом вопросе: jsViews - как установить выбранный параметр из данных.

Правильный синтаксис для опции:

<option data-link="value{:Value} {:Name} selected{:~selected === Value}"></option>

(как показано в ответе на этот вопрос: https://stackoverflow.com/a/18154317/1054484.)

См. также последний образец здесь: http://www.jsviews.com/#jsvplaying.

Вот исправленная версия вашего jsfiddle: http://jsfiddle.net/BorisMoore/8dwdkp2d/ .

Обратите внимание, что этот синтаксис позволит вам динамически обновлять отображаемые значения Name и Value; Попробуйте изменить значение текстового поля в моей версии jsfiddle.

Альтернативный синтаксис, если вам не нужно динамически обновлять значения Name и Value:

<option value="{{:Value}}" selected="{{:~selected === Value}}">{{:Name}}</option>

Чтобы понять синтаксис выражений связи с данными, см. http://www.jsviews.com/#linked-elem-syntax

person BorisMoore    schedule 22.10.2015
comment
Спасибо за исправление! Должно быть, я перенес какой-то плохой синтаксис из вопроса, который был ближе всего к тому, что мне нужно. Как ни странно, изменение : на ^ в настройке ссылки на данные для каждой опции работает, вот обновленный jsfiddle: jsfiddle.net/hdra2e2d/6 - person Brian Hinckle; 23.10.2015
comment
Что ж, этот синтаксис по-прежнему неверен... См. jsviews.com/#linked-elem-syntax для получения информации о том, как работает синтаксис передачи данных... - person BorisMoore; 23.10.2015
comment
Понял, еще раз спасибо. - Читая это, я озадачен фактическим значением:, ~ и ^, они явно определены где-то для каждого контекста, в котором они могут использоваться? - person Brian Hinckle; 23.10.2015
comment
Я работаю над новыми темами документа по этому вопросу. Но для ^ см. jsviews.com/#linked-tag-syntax. ~ см. jsviews.com/#helpers. Для: см. ссылку, которую я вам дал, jsviews.com/#linked-elem-syntax - абзац: соответствующий полный синтаксис представляет собой тег {{: ...}}, связанный с данными... речь идет о полном синтаксисе, связанном с jsviews.com/#assigntag. - person BorisMoore; 23.10.2015