【发布时间】:2021-02-19 14:14:33
【问题描述】:
对于以下为什么不起作用有点困惑。我已经尝试过这种方法,我不向函数传递参数并且可以更新 UI,但是如果我传递参数并对其执行相同的操作,它会在代码中更新它并且我可以 console.log 它出来了,但 UI 没有更新。
这个作品:
<script>
import { text, toggle_class } from "svelte/internal";
let line1 = {name:"line 1", display:"some text here", originalText:"some init text", visible:true};
function toggleView(){
line1.visible = !line1.visible;
if(!line1.visible) line1.display = "*************"
else line1.display = line1.originalText
};
</script>
<main>
<button on:click="{toggleView}">{line1.display}</button>
</main>
这不起作用:
<script>
import { text, toggle_class } from "svelte/internal";
let line1 = {name:"line 1", display:"some text here", originalText:"some init text", visible:true};
function toggleView(field){
field.visible = !field.visible;
if(!field.visible) field.display = "*************"
else field.display = field.originalText
};
</script>
<main>
<button on:click="{toggleView(line1)}">{line1.display}</button>
</main>
我认为这可能是因为从 Svelte 的角度来看,我将其分配给了一个局部变量,但我不确定如何调用函数以使其可重用,因为我会为一堆行。
任何帮助将不胜感激。
更新 - 已解决
以下作品基于以下 Thomas 的回答:
<script>
import { text, toggle_class } from "svelte/internal";
var lines = {
line1: {
name: "line 1",
display:"some text here",
originalText:"some init text",
visible:true
}
};
function toggleView(field) {
return function() {
lines[field].visible = !lines[field].visible;
if (!lines[field].visible) {
lines[field].display = "*************";
} else {
lines[field].display = lines[field].originalText;
}
}
}
</script>
<main>
<button on:click="{toggleView('line1')}">{lines.line1.display}</button>
</main>
【问题讨论】:
标签: javascript svelte svelte-3