Как предварительно выбрать опцию в выпадающем списке нокаутом - PullRequest
4 голосов
/ 09 декабря 2011

Я посмотрел на этот другой вопрос, но не могу заставить мой блок выбора работать правильно: Привязка начального / заданного по умолчанию значения раскрывающегося списка (выбрать)

У меня есть следующий игровой объект:

function Game(visitingTeamDetails, homeTeamDetails, game) {
if (arguments.length > 0) {
    this.VisitingTeamDetails = visitingTeamDetails;

    this.HomeTeamDetails = homeTeamDetails;

    this.GameId = ko.observable(game.GameId);
    this.HomeTeamName = ko.observable(game.HomeTeamName);
    this.VisitingTeamName = ko.observable(game.VisitingTeamName);
    this.SportTypeName = ko.observable(game.SportTypeName);
    this.HomeAccountName = ko.observable(game.HomeAccountName);
    this.VisitingAccountName = ko.observable(game.VisitingAccountName);
    this.GameDateString = ko.observable(game.GameDateString);
    this.GameTimeString = ko.observable(game.GameTimeString);
    this.AvailableSportTypes = ko.observableArray(game.Sports);

    this.sportTypeFunction = function () {
        for (sportType in this.AvailableSportTypes()) {
            if (this.AvailableSportTypes()[sportType].Name == this.SportTypeName()) {
                return this.AvailableSportTypes()[sportType];
            }
        }
        return null;
    };

    this.SportType = ko.observable(game.SportType);
}
}

SportType - это объект с Name и SportTypeId.

У меня есть следующий шаблон:

 <td rowspan="3"><select data-bind="options: AvailableSportTypes, value: SportType, optionsText:'Name', optionsCaption: 'Choose...'" class="sportType"></select></td>

AvailableSportTypes - это список SportType.

Появляется список с именами SportTypes из выпадающего списка, но я не могу сделать начальный выбор SportType. Я написал sportTypeFunction, чтобы показать себе, что данные поступают правильно, и он выберет правильное значение, но изменение моего выбора в выпадающем списке не приведет к обновлению SportType.

Я уверен, что делаю что-то не так. Кто-нибудь видел это?

Спасибо

1 Ответ

11 голосов
/ 10 декабря 2011

Когда передается game.SportType, это должна быть ссылка на элемент в game.AvailableSportTypes, а не просто объект, который выглядит одинаково.

В основном два объекта не равны, если только онина самом деле ссылка на один и тот же объект.

var a = { name: "test" },
    b = { name: "test" }; 

    alert(a === b); //false

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

Не то, чтобы это было лучше, нов KO 1.3 вы можете расширить .fn наблюдаемых, наблюдаемых массивов и зависимых наблюдаемых, чтобы добавить дополнительную функциональность.

Вот пример: http://jsfiddle.net/rniemeyer/ZP79w

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...