2015-07-22 3 views
0

Я где-то читал, DOM обновляется каждый раз, когда происходит событие, и происходят изменения в данных, привязанных к DOM. Поэтому я хотел узнать больше об этом. Я попробовал код ниже, но DOM не обновляется, когда данные в textarea меняются, но обновляются каждый раз, когда я нажимаю или нажимаю клавишу Tab.Mithriljs не обновляет DOM при изменении данных

var app = { 
    controller: function() { 
     var self = this; 
     this.model = {}; 
     this.model.errors = []; 
     this.break_data = function (value) { 
      self.model.errors = value.split(' '); 
      m.redraw(); 
     } 
    }, 
    view: function (ctrl) { 
     return m('.content', [ 
      m('textarea', {onchange: m.withAttr('value', ctrl.break_data)}), 
      ctrl.model.errors.map(function (error) { 
       return m('.error', error); 
      }) 
     ]); 
    } 
} 

m.mount(document.getElementById('app'), app); 

Я даже попытался m.startComputaion(), m.stopComputation() и m.redraw() не из них работает.

ответ

1

Время перерисовки описано здесь: https://stackoverflow.com/a/30728976/70894

Что касается вашего примера, проблема не Mithril но событие. Вы должны использовать oninput вместо onchange, чтобы искать немедленные изменения. Как Mozilla docs for the "change" event состояний:

Событие изменения вызывается для ввода, выберите текстовое поле и элементов, когда изменение значения элемента совершается в пользователя. В отличие от события ввода событие изменения не обязательно , уволенное за каждое изменение значения элемента.

Вот скрипка с кодом, который использует oninput: http://jsfiddle.net/ciscoheat/LuLcra77/

Обратите внимание, что вам не нужно m.redraw в обработчик событий больше теперь, когда используются правильное событие, так как Mithril перерисовывает автоматически после каждого события, определенного в обращении к m().

 Смежные вопросы

  • Нет связанных вопросов^_^