JSFiddle - React, Tailwind, and code Playground

HTML

<div class="Example">
    新字串:<input data-bind="value:newNum,valueUpdate:'afterkeydown'" /><button class="btn" data-bind="click:addNum,visible:newNum().length">加</button><br />
    陣列有:<span data-bind="text:nums().length"></span> 個<br />
    新字長有:<span data-bind="text:newNum().length"></span>
  <ul data-bind="foreach:nums">
      <li><span data-bind="text:$data"></span><button class="btn" data-bind="click:$parent.delNum">刪</button></li>
  </ul>
</div>

CSS

body { font-family: arial; font-size: 14px; }
.Example { padding: 1em; background-color: #EEEEDD; border: 1px solid #CCC; max-width: 655px; }
.btn { background-color: hsl(36, 100%, 40%) !important; background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffad32", endColorstr="#cc7a00"); background-image: -khtml-gradient(linear, left top, left bottom, from(#ffad32), to(#cc7a00)); background-image: -moz-linear-gradient(top, #ffad32, #cc7a00); background-image: -ms-linear-gradient(top, #ffad32, #cc7a00); background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffad32), color-stop(100%, #cc7a00)); background-image: -webkit-linear-gradient(top, #ffad32, #cc7a00); background-image: -o-linear-gradient(top, #ffad32, #cc7a00); background-image: linear-gradient(#ffad32, #cc7a00); border-color: #cc7a00 #cc7a00 hsl(36, 100%, 35%); color: #333 !important; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.33); -webkit-font-smoothing: antialiased; }

JavaScript

function viewModel() {
  var self = this;
  self.title = 'helo';
  self.nums = ko.observableArray([1,2,3,4,5,6,7]);
  self.delNum = function(num){
      self.nums.remove(num);   
  };
  self.newNum = ko.observable('');
  //self.newLength = ko.observable(self.newNum().length);
  self.addNum = function(){
      self.nums.push(self.newNum());
      self.newNum('');
  };
    
};

ko.applyBindings(new viewModel());