2013-05-03 46 views
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> 

什么都没有显示在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); 
      (...) 
     } 
    }  
+0

您可以发布您的JavaScript相关?模型,模型初始化和applyBindings()代码。 – 2013-05-04 03:34:18

+0

因为根据你提供的代码,这应该在这个jsfiddle中演示。 http://jsfiddle.net/vYdVS/这让我想到它与你参考'Spa.'有关。 – 2013-05-04 03:36:45

+0

@FeistyMango添加了你要求的js。我认为你对spa的参考是正确的,但并不真正知道如何调试。任何提示和技巧?我试着用$ root.Spa ...来确保Im在ViewModel的根目录下,但它没有帮助。 – 2013-05-04 09:47:07

回答

0

它看起来像你缺少optionsValue参数。从knockout.js documentation

如果你想让用户从任意JavaScript对象(不只是字符串)数组选择,然后看到optionsText 和optionsValue参数

这里的例子,他们给:

​​
+0

value属性用于跟踪用户选择的值并且不需要显示该列表。 Feisty评论中的jsfiddle(在这个问题下)表明它没有它。 – 2013-05-04 09:58:37

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); 
+0

我在我的代码中有optionsText属性。 :) – 2013-05-04 09:54:38

+0

这是真的。对不起,应该有一个小错误。你可以把代码放入jsFiddle或plunker ?. – Gere 2013-05-04 17:58:01