在Knockout JS中有下拉列表的数组

时间:2015-04-02 19:50:32

标签: javascript jquery knockout.js

大家下午好。

我试图搜索它,但要么我正在寻找错误的东西,要么就是没有答案。我尝试使用下拉列表在淘汰赛中创建一个列表,当这些下拉值发生变化时,需要更新列表中的相应值。这是我目前的愿景"那个,不起作用。

http://jsfiddle.net/Lypmnspz/6/

以下是Fiddle的代码:



function pageModel(){
  var self = this
  
  // Create an observalbe array of options
  self.languages = ko.observableArray(["English","English","English"]);
  
    // Languages
  self.availableLanguages = ko.observableArray(["English", "Spanish", "German", "Russian"]);
  
  
   
} 

ko.applyBindings(new pageModel());

<h4>When I update it here</h4>
<ul data-bind="foreach: languages">
    <li><select data-bind="options: $parent.availableLanguages, value: $data"></select></li>
</ul>


<h4>I want to see the update here</h4>
<ul data-bind="foreach: languages">
    <li data-bind="text: $data"></li>
</ul>
&#13;
&#13;
&#13;

有人能提出什么建议吗?谢谢。

2 个答案:

答案 0 :(得分:1)

也许您需要其他数据模型 - 让我们称之为LanguageSelection

&#13;
&#13;
var LanguageSelection,
    PageModel,
    pageModel;

LanguageSelection = function LanguageSelection() {
  this.language = ko.observable();
};

PageModel = function PageModel(){
  this.availableLanguages = ko.observableArray([
    "English",
    "Spanish",
    "German",
    "Russian"
  ]);
  
  this.languageSelections = ko.observableArray([]);
} 

pageModel = new PageModel();

pageModel.languageSelections.push( new LanguageSelection() );
pageModel.languageSelections.push( new LanguageSelection() );
pageModel.languageSelections.push( new LanguageSelection() );

ko.applyBindings( pageModel );
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<h4>When I update it here</h4>
<ul data-bind="foreach: languageSelections">
    <li>
      <select data-bind="options: $parent.availableLanguages, value: language"></select>
    </li>
</ul>


<h4>I want to see the update here</h4>
<ul data-bind="foreach: languageSelections">
    <li data-bind="text: language"></li>
</ul>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我最终得到了丑陋的解决方案,但它确实有效。应该有更优雅的方式。这是链接:

http://jsfiddle.net/Lypmnspz/10/

HTML

<h4>When I update it here</h4>
<ul data-bind="foreach: languages">
    <li><select data-bind="options: $parent.availableLanguages, value: $data, event: {change: $parent.updateOtherLanguage}, attr: {id: 'langopt-'+$index() }"></select></li>
</ul>


<h4>I want to see the update here</h4>
<ul data-bind="foreach: languages">
    <li data-bind="text: $data"></li>
</ul>

的Javascript

function pageModel(){
  var self = this

  // Create an observalbe array of options
  self.languages = ko.observableArray([ko.observable("English"),ko.observable("English"),ko.observable("English")]);

    // Languages
  self.availableLanguages = ko.observableArray(["English", "Spanish", "German", "Russian"]);

    self.updateOtherLanguage = function(lang, event){

       // console.log(event.target.id.split('-')[1],event.target.value)
        self.languages()[Number(event.target.id.split('-')[1])]((event.target.value))
    }


} 

ko.applyBindings(new pageModel());