0

我正在为 knockout.js 的选项绑定而苦苦挣扎。当我不使用选项绑定时,像这样

<select id="AddProductSelect" name="chosenSpaProduct">
   <!-- ko foreach: Spa.SpaProductList -->
         <option data-bind="text: Name" ></option>
   <!-- /ko -->
</select>

它工作正常。在下面的行中,我正在尝试使用这样的选项绑定

<select data-bind="options: Spa.SpaProductList, optionsText: 'Name'"></select>

选择元素中没有显示任何内容。

Spa.SpaProductList 是一个对象数组。关于我做错了什么的任何想法?

编辑:相关JS:

    $(document).ready(function () {
       var initialData = @Html.Raw(Json.Encode(Model));
       viewModel = new ViewModel(initialData);
       ko.applyBindings(viewModel);
       viewModel.ViewLoaded(true);

       function ViewModel(initialData) {
           var self = this;
           ko.mapping.fromJS(initialData, {}, self); 
           (...)
       }
    }    
4

2 回答 2

0

我认为您缺少 optionsText。

这个例子正在工作:(http://jsfiddle.net/geremora/6VmCh/

HTML:

       <select data-bind="options: cars,
                   optionsText: 'brand',
                   value: selectedCar,
                   optionsCaption: 'Select...'"></select>

JS:

var Car = function (brand, model) {
   this.brand = brand;
   this.model = model;
};

var viewModel = {
   cars: ko.observableArray([
    new Car("Audi", "A3"),
    new Car("Ford", "Ranger"),
    new Car("Fiat", "500")]),
   selectedCar: ko.observable(), 
 };

 viewModel.selectedCar.subscribe(function (data) {
    console.log(data)
 });

 ko.applyBindings(viewModel);
于 2013-05-04T04:52:10.453 回答
0

看起来您缺少optionsValue参数。从knockout.js 文档中:

如果您想让用户从任意 JavaScript 对象(不仅仅是字符串)数组中进行选择,请查看 optionsText和 optionsValue参数

这是他们给出的例子:

<select data-bind="options: availableCountries, optionsText: 'countryName', value: selectedCountry"></select>
于 2013-05-04T01:19:48.273 回答