如何在下拉列表淘汰赛中预先选择一个选项

Tyl*_*itt 4 data-binding select initialization knockout.js

我已经看过这个其他问题,但无法让我的选择框正常工作: 绑定下拉列表(选择)列表的初始/默认值

我有以下Game对象:

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);
}
}
Run Code Online (Sandbox Code Playgroud)

SportType是与对象NameSportTypeId.

我有以下模板:

 <td rowspan="3"><select data-bind="options: AvailableSportTypes, value: SportType, optionsText:'Name', optionsCaption: 'Choose...'" class="sportType"></select></td>
Run Code Online (Sandbox Code Playgroud)

AvailableSportTypes是一个列表SportType.

该列表将在下拉列表中显示SportTypes的名称,但我无法进行初始选择SportType.我写信sportTypeFunction告诉自己数据输入正确,它会选择正确的值,但在下拉列表中更改我的选择不会更新SportType.

我确定我做错了什么.有人看到了吗?

谢谢

RP *_*yer 11

game.SportType被传递的,它需要在该项目的参考game.AvailableSportTypes,而不只是一个对象,它看起来是一样的.

基本上两个对象不相等,除非它们实际上是对同一对象的引用.

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

    alert(a === b); //false
Run Code Online (Sandbox Code Playgroud)

因此,您需要调用函数以在数组中找到正确的对象并将其设置为您的observable的值.

并不是说它更好,但在KO 1.3中,您可以扩展.fnobservables,observableArrays和dependentObservables以添加其他功能.

以下是一个示例:http://jsfiddle.net/rniemeyer/ZP79w