knockout.js의 Zundocomi Kiyoshi(DoCoMo 광 대응 버전)

최근 한 달 동안 많은 Zundocom 시스템이 출시되었지만 고객의 요구를 충족시킬 수 있는 docomo 광선을 찾지 못해 스스로 만들어 보았습니다.

텍스트 필드의 문을 변경하면 실행 중이든 아예 발동하든 즉시 변경이 반영됩니다.
html
<div>
  <input type="text" data-bind="textInput: zun"/>
  <input type="text" data-bind="textInput: doko"/>
  <input type="text" data-bind="textInput: kiyoshi"/>
</div>
<div>
  interval(ms):<input type="text" data-bind="value: interval"/>
</div>
<div>
  <button data-bind="click: start">start</button>
</div>

<div data-bind="foreach: results">
  <span data-bind="text: $data"></span>
</div>

<div class="completed">
  <span data-bind="text: kiyoshi, visible: isCompleted"></span>
</div>
JavaScript
var ZundokoViewModel = function() {
  this.zun = ko.observable("ズン");
  this.doko = ko.observable("ドコ");
  this.kiyoshi = ko.observable("キヨシ!");
  this.pattern = [this.zun, this.zun, this.zun, this.zun, this.doko];
  this.interval = ko.observable(500);
  this.results = ko.observableArray();

  this.start = function() {
    this.results.removeAll();
    this.next();
  };
  this.next = function() {
    this.results.push(Math.random() < 0.5 ? this.zun : this.doko);
    if (!this.isCompleted()) {
      setTimeout(this.next.bind(this), this.interval());
    }
  };
  this.isCompleted = ko.computed(function() {
    var len = this.results().length;
    if (len < this.pattern.length) return false;
    var tails = this.results().slice(len - this.pattern.length);
    for (i = 0; i < this.pattern.length; i++) {
      if (tails[i] != this.pattern[i]) return false;
    }
    return true;
  }, this);
};

var viewModel = new ZundokoViewModel();

ko.applyBindings(viewModel);
  • knockout.js 데이터로 연결합니다.

  • 텍스트 필드의 데이터 바인딩은 "textInput"을 사용하여 입력을 즉시 반영합니다.value Enter 키를 누를 때 초점이 맞지 않을 때만 반영)
    <input type="text" data-bind="textInput: zun"/>
    

  • 임의로 선택한 ZundoCo는 observableArrayresults 속성에 저장됩니다.
    이때observable 대상this.zun()을 귀속값this.zun이 아닌 직접 저장하면 수치의 변경 사항을 즉시 반영할 수 있습니다.
    this.results.push(Math.random() < 0.5 ? this.zun : this.doko);
    
  • 좋은 웹페이지 즐겨찾기