2015-03-08 3 views
0

Невозможно подключить двустороннюю привязку данных к тегу <div contenteditable>. Here is the demoМетеор - есть ли способ получить двунаправленную двустороннюю привязку данных к работе?

HTML:

<body> 
    <div contenteditable style="height:40px;min-width:40px">{{content}}</div> 
</body> 

ЯШ:

if (Meteor.isClient) { 
    Session.setDefault('content', 'Try to edit me') 

    Template.body.helpers({ 
     content: function() { 
      return Session.get('content') 
     } 
    }) 

    Template.body.events({ 
     'keydown div': function (e) { 
      setTimeout(function(){ Session.set('content', $(e.target).text()) }) 
     } 
    }) 
} 

Существует также open issue для этого на GitHub.

+0

Попробуйте размыть событие, оно сохранит содержимое после того, как вы потеряете фокус на div – Sindis

+0

@Sindis, который работает, но было бы неплохо, если бы он работал и на keydown: - \ – brg

+0

как насчет event.keyCode, просто добавьте char keyCode к сеансу – Sindis

ответ

0

вы можете использовать 'вход' событие

meteorpad вилку из вашего примера: http://meteorpad.com/pad/x3JQpGiqpE2FrTfLK/content%20editable

связанные с этим вопрос: contenteditable change events

Template.body.events({ 
    'input div': function (e) { 
     Session.set('content', $(e.target).text()); 
    } 
    }); 

Однако, существует проблема с привязкой редактируемых элементов в общем, вы заметите, что каждое событие ввода приводит к установке текста дважды.

Вы можете обойти эту проблему, убирая редактируемый текст после каждого редактирования:

Template.body.events({ 
    'input div': function (e) { 
     Session.set('content', $(e.target).text()); 
     $(e.target).text(''); 
    } 
    }); 

Но теперь у вас есть еще одна проблема, курсор переходит к началу.

Для того, чтобы иметь дело с этими дилеммами, я использую эту логику: «? Ли пользователь сделать эти самым последние редактирования в модель данных»

  • Обновление модели данных с использованием последнего текста пользователя. Не обновляйте текстовый редактор. будь оптимистом.

  • , если обновление не удалось, установить текстовый редактор для модели данных (вернуть их редактировать, отображать некоторую ошибку)

«Что-то кроме пользователя изменить модель данных для текста?»

  • обновление текстового редактора, чтобы показать самый последний текст
+1

, то вы, вероятно, захотите использовать дебют подчеркивания для входного события для некоторой лучшей производительности. – looshi

0

или просто использовать https://github.com/gwendall/meteor-bindings. Он использует реактивные переменные для привязки любого элемента DOM к входам.

Отказ от ответственности: Я его построил.

+0

Работает ли это с коллекциями Монго? – brg

+0

Какой конкретный вариант использования вы имеете в виду? – gwendall

+0

Для привязки данных к определенному свойству в коллекции? – brg

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