KnockoutJS绑定选择

时间:2013-12-23 17:52:22

标签: javascript knockout.js

我是KO的新人,我错过了一些重要的事情:(

请告诉我为什么这些代码不起作用?小提琴在这里:http://jsfiddle.net/Z8p4B/ 我很沮丧。为什么selectedItem没有设置值"选择"。

HTML:

    <select data-bind="options: items, optionsText: 'name', optionsValue: 'id', value: selectedItem"></select>

视图模型:

    var viewModel = {
    /*selectedItem: ko.observable(3), I also try but without success */
    selectedItem: 3,
    items: ko.observableArray()
};

ko.applyBindings(viewModel);

setTimeout(function() {
    viewModel.items([
        {id: 1, name:"pencil"},
        {id: 2, name:"pen"},
        {id: 3, name:"marker"},
        {id: 4, name:"crayon"}
    ]);
});

由于

1 个答案:

答案 0 :(得分:2)

您需要在填充selectedItem数组后设置items

var viewModel = {
    selectedItem: ko.observable(),
    items: ko.observableArray()
};

ko.applyBindings(viewModel);

setTimeout(function() {
    viewModel.items([
        {id: 1, name:"pencil"},
        {id: 2, name:"pen"},
        {id: 3, name:"marker"},
        {id: 4, name:"crayon"},
    ]);
    viewModel.selectedItem(3);
});

演示JSFiddle

在您的原始代码中,当您调用selectedItem时,KO会将undefined设置为ko.applyBindings(viewModel);,因为在应用绑定时items集合为空。因此,当您填充viewModel.items时,您的原始selectedItem将丢失(请参阅此fiddle)。