2016-09-09 5 views
0

я данные, вставленной в HTML, как это:Uncaught ReferenceError: функция не определена ошибка при вызове функции бунта

<p each="{this.holidayListFirstPart}" if="{hdate}"> 
    <span id="{description}" onclick={showInputBox}>{hdate}:{description}</span> 
</p> 

Я пытаюсь преобразовать span тег в textarea на щелчке мыши, так что пользователь может редактировать текст так:

showInputBox(e) { 
    self.textContent = document.getElementById(e.target.id).innerHTML; 

    var mySpan = document.getElementById(e.target.id); 
    var customTextArea = document.createElement("textarea"); 
    customTextArea.id = e.target.id; 
    customTextArea.setAttribute('onmouseout','{focusGone}'); 
    customTextArea.innerHTML = self.textContent; 
    mySpan.parentNode.replaceChild(customTextArea, mySpan); 
} 

focusGone(e){ 
    console.log("lost focus"); 
} 

проблема заключается в том, когда пользователь покидает текстовое поле после редактирования текста, его ошибка метательный что focusGone функция не определена:

Uncaught ReferenceError: focusGone is not defined 

Как это сделать в riotjs?

+0

@Okazari Ok, thx! –

+1

'setAttribute', вероятно, не работает, когда вы устанавливаете его в' {focusGone} ', который не является функцией, а какой-то шаблон, который, вероятно, работает раньше – adeneo

+0

@adeneo Я попробовал с' customTextArea.setAttribute ('onmouseout', ' focusGone() '); 'который не работал ни – Satyadev

ответ

1

Вы зафиксируете обновить определение тега во время выполнения, that's не поддерживается https://github.com/riot/riot/issues/1752

Но вы можете получить тот же результат другого способа

<my-tag> 
<my-tag> 
    <p each="{this.holidayListFirstPart}" if="{hdate}"> 
     <span show="{!parent.editing}" id="{description}" onclick={showInputBox}>{hdate}:{description}</span> 
     <textarea id="editText" onmouseout="{parent.focusGone}" show="{parent.editing}"></textarea> 
    </p> 

    this.holidayListFirstPart = [{description:'des1', hdate:'123'}, {description:'des2'}] 
    this.editing = false 

    showInputBox(e) { 
     this.editing = !this.editing 
     this.editText.innerText = e.currentTarget.innerText 
    } 

    focusGone(e){ 
    this.editText.innerHTML = e.currentTarget.value 
    alert('result: ' + this.editText.innerHTML); 
    } 
</my-tag> 

Update Я обновил кода на основе вашего комментария. Идея состоит в том, чтобы знать, как получить доступ к необходимым вам данным, вы можете использовать event.currentTarget или прямое использование this.object_id проверить эту скрипту https://jsfiddle.net/vitomd/1b2m7xec/6/

+0

, но проблема не может получить значение после редактирования внутри функции' focusGone() '. проверьте эту скрипту: https://jsfiddle.net/1b2m7xec/2/ – Satyadev

+0

Я обновил код на основе вашего комментария. – vitomd

+0

Большое вам спасибо. – Satyadev