学习knockoutjs - 值不添加到数组

时间:2017-01-24 11:45:54

标签: javascript arrays knockout.js

我最近开始学习knockoutjs(我认为它很精彩。)但是如果搞乱它并学习如何添加到阵列我已经卡住了,需要一些帮助。 Fiddle can be found here

这是我的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>

这是我的knockoutjs代码:

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

出于某种原因,我不能让新动物进入当前的动物群 - 我不是100%我做错了,因为它把价值放在了,而不是文本。

任何帮助都会很棒:)

1 个答案:

答案 0 :(得分:1)

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

Updated JSFiddle

指针

  • Knockout为value: animalToAdd, valueUpdate: 'afterkeydown'添加了名为textInput的新绑定。这是在 KO 3.2 中引入的,因此如果您使用的是上述版本,请使用它。