Javascript 敲除JS任意对象绑定

Javascript 敲除JS任意对象绑定,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我对击倒js非常陌生,我正在尝试我的手在例子上,所以我有这个 <script> var Country = function(name, population) { this.countryName = name; this.countryPopulation = population; }; var viewModel = { availableCountries : ko.observableArray([ new Country("U

我对击倒js非常陌生,我正在尝试我的手在例子上,所以我有这个

<script>
var Country = function(name, population) {
    this.countryName = name;
    this.countryPopulation = population;
};

var viewModel = {

    availableCountries : ko.observableArray([
        new Country("UK", 65000000),
        new Country("USA", 320000000),
        new Country("Sweden", 29000000)
    ]),
    selectedCountry : ko.observable() // Nothing selected by default
};  

$(function(){ko.applyBindings(viewModel)});

</script>
但它不起作用,“选择…”仍然显示为预选选项文本,而不是“Uk”,然后我尝试了

selectedCountry : ko.observable(availableCountries[0])
但我总是犯这个错误

“未捕获的TypeError:无法读取未定义的属性“0”


我做错了什么?如何纠正它?

我认为解决方法是将您选择的值设置为“UK”。因为值绑定只读取值,而不是整个对象

因此,当您将对象设置为索引0时,该项不会被识别为值


HTH

定义viewModel对象后,添加以下内容:

viewModel.selectedCountry(viewModel.availableCountries()[0]);
您不能在声明对象时引用对象上的值(至少我不认为您可以),因此您需要在声明后进行赋值

另一个选项是将viewModel定义为函数:

var viewModel = function (){
    var self = this;

    self.availableCountries = ko.observableArray([
        new Country("UK", 65000000),
        new Country("USA", 320000000),
        new Country("Sweden", 29000000)
    ]);

    self.selectedCountry = ko.observable(self.availableCountries()[0]) 
};
viewModel.selectedCountry(viewModel.availableCountries()[0]);
var viewModel = function (){
    var self = this;

    self.availableCountries = ko.observableArray([
        new Country("UK", 65000000),
        new Country("USA", 320000000),
        new Country("Sweden", 29000000)
    ]);

    self.selectedCountry = ko.observable(self.availableCountries()[0]) 
};