Javascript 学习knockoutjs-不向数组添加值

Javascript 学习knockoutjs-不向数组添加值,javascript,arrays,knockout.js,Javascript,Arrays,Knockout.js,我最近开始学习knockoutjs(我认为它很棒。)然而,我在学习如何添加到阵列时遇到了麻烦,需要一些帮助 以下是我的html代码: <h3>We need more animals</h3> <form data-bind="submit: addAnimal"> <input type="text" data-bind="value: animalToAdd, valueUpdate: 'afterkeydown'"/>

我最近开始学习knockoutjs(我认为它很棒。)然而,我在学习如何添加到阵列时遇到了麻烦,需要一些帮助

以下是我的html代码:

 <h3>We need more animals</h3>

  <form data-bind="submit: addAnimal">
      <input type="text" data-bind="value: animalToAdd, valueUpdate: 'afterkeydown'"/>
      <button type="submit">Add animal</button>
  </form>

  <select data-bind="options: animalArray, optionsText: 'name'"></select>

  <p data-bind="text: selectedAnimal"></p>
出于某种原因,我无法让新的动物进入当前的动物数组中——我不是100%认为我做错了什么,因为它将值放入,而不是文本

任何帮助都很好:)

  • 第一个错误是,您缺少
    selectedAnimal
    的定义,但由于您在
    text
    绑定中使用它,因此代码正在中断
  • 第二个错误是,
    animal
    有一个结构
    {name:'elephant'}
    ,但是你推的是self.animalArray.push(self.animalToAdd()),所以即使你推,你也不会在select中看到任何东西

指针
  • Knockout为
    value:animaltodd,valueUpdate:'afterkeydown'
    添加了新的绑定,称为
    textInput
    。这是在KO3.2中引入的,所以如果您使用的是上述版本,请使用它
谢谢你提供的信息:)帮了我很多忙。
function viewModel(){
var self = this;
self.animalArray = ko.observableArray([
    {
         name: 'elephant'
    },
    {
         name: 'dog'
    },
    {
         name: 'cat'
    }
 ]);

  self.animalToAdd = ko.observable();
  self.addAnimal = function(){
      if(self.animalToAdd() != ''){
          self.animalArray.push(self.animalToAdd());
          self.animalToAdd('');
      }
      alert(self.animalToAdd());
   }
   }
 ko.applyBindings(viewModel);