KnockoutJS выберите поиск - PullRequest
       11

KnockoutJS выберите поиск

0 голосов
/ 06 марта 2012

Я пытаюсь связать выбор с KnockoutJS с предопределенным значением, которое приходит из моей модели. Согласно документации это должно происходить из свойства value , но я не могу предварительно выбрать значение в раскрывающемся списке на основе этого. Вот пример кода, который отражает мою проблему:

<script src="Scripts/jquery-1.7.1.js"></script>
<script src="Scripts/knockout-2.0.0.js"></script>

<script>
    $(function () {

        var viewModel =
        {
            Positions: ko.observableArray(
                                            [
                                                { Id: 1, PositionName: 'Point Guard' },
                                                { Id: 2, PositionName: 'Shooting Guard' },
                                                { Id: 3, PositionName: 'Center' },
                                                { Id: 4, PositionName: 'Small Forward' },
                                                { Id: 5, PositionName: 'Power Forward' }
                                            ]),
            Players: ko.observableArray(
                                            [
                                                { Id: 1, Name: 'Derrick Fisher', Position: 'Point Guard' },
                                                { Id: 2, Name: 'Kobe Bryant', Position: 'Shooting Guard' },
                                                { Id: 3, Name: 'Andrew Bynum', Position: 'Center' },
                                                { Id: 4, Name: 'Metta World Peace', Position: 'Small Forward' },
                                                { Id: 5, Name: 'Pau Gasol', Position: 'Power Forward' }
                                            ])
        };

        ko.applyBindings(viewModel);

    });
</script>

В моих привязках я хотел бы использовать простую таблицу, в которой первый столбец предварительно выбрал значение поиска, в данном случае это «позиция» игрока по умолчанию. Вот пример:

<table>
    <thead>
        <tr>
            <td>Position</td>
            <td>Player</td>
        </tr>
    </thead>
    <tbody data-bind='foreach: Players'>
        <tr>
            <td>
                <select data-bind="options: $root.Positions, optionsText:'PositionName', 
                                value:'$data.Position', optionsCaption: 'Choose...'">
                </select>
            </td>
            <td>
                <span data-bind='text: Name'></span>                                
            </td>
        </tr>
    </tbody>
</table>

Похоже, что поиски в порядке (выбор заполняется всеми значениями позиций в поиске), однако позиция данного игрока не выбрана по умолчанию. Может кто-нибудь определить, где я сделал плохое предположение или ошибку?

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Если вы не используете optionsValue, то он будет записывать выбранный объект в то, к чему вы привязали value.

Если у вашего player есть отдельная копия объекта position, тогда он не будет совпадать.

Например,

var a = { Id: 3, Name: 'Andrew Bynum', Position: 'Center' };
var b = { Id: 3, Name: 'Andrew Bynum', Position: 'Center' };

alert(a === b); //false they are not a reference to the same object

Итак, вашему игроку либо нужно использовать ссылку на тот же объект, либо вы должны указать привязку optionsValue с помощью Id, чтобы он считывал / записывал Id в свойство позиции игрока.

0 голосов
/ 06 марта 2012

Вы не указали, откуда берется $ data.Position.
Возможно, вам также потребуется установить optionsValue, http://knockoutjs.com/documentation/options-binding.html

Позволяет связывать значение со свойством, а не с объектом JS.

...