如何使用 ractive 为数组中的新 DOM 条目设置样式?
How do I style new DOM entries in an array using ractive?
我有一个修改数组的 Ractive 实例。当数组中出现新值时,我希望突出显示相应的元素。我目前通过在新创建的元素上设置一些样式来做到这一点。 这里是 jsfiddle。
var ractive = new Ractive({
el: 'main',
template: `
<h1>Hello {{name}}!</h1>
{{ #things:index }}
<p>{{ things[index] }}</p>
{{ /things }}
`,
data: function(){
return {
things: [
'banana',
'carrot'
]
}
},
oncomplete: function(){
var component = this;
setTimeout(function(){
component.set('things', ['apple', 'banana', 'carrot'])
}, 5 * 1000)
}
});
唯一的问题是,由于 ractive 重复使用元素,样式出现在错误的元素上。
您会看到当 'banana', 'carrot']
更改为 ['apple', 'banana', 'carrot']
时,突出显示 'carrot'
元素,而不是与新值对应的 'apple'
元素。
在数组中设置新条目样式的最佳方式是什么?
你应该使用 splice
方法
component.splice('things', 0, 0, 'apple'); // Add at zero index
component.splice('things', 1, 0, 'apple'); // Add at first index
而不是再次设置整个数组。这相当于 Array.splice
方法。
整个代码如下所示。
var ractive = new Ractive({
el: 'main',
template: `
<h1>Hello {{name}}!</h1>
{{ #things:index }}
<p>{{ things[index] }}</p>
{{ /things }}
`,
data: function(){
return {
things: [
'banana',
'carrot'
]
}
},
oncomplete: function(){
var component = this;
setTimeout(function(){
component.splice('things', 0, 0, 'apple');
}, 5 * 1000)
}
});
在此处阅读更多相关信息。
https://ractive.js.org/api/#ractivesplice
使用 recentlyAddedThings
缓存来添加已添加项目的缓存。这是一个 working jsfiddle:
var ractive = new Ractive({
el: 'main',
template: `
{{ #things:index }}
<p class="{{ #if recentlyAddedThings.includes(things[index]) }}new{{ /if }}">
{{ things[index] }}
</p>
{{ /things }}
`,
data: function(){
return {
things: [
'banana',
'carrot'
],
recentlyAddedThings: [
]
}
},
oncomplete: function(){
var component = this;
var addThing = function(newThing){
var things = component.get('things')
var newThing = newThing
things.push(newThing)
component.set('things', things.sort())
component.push('recentlyAddedThings', newThing)
}
setTimeout(function(){
addThing('apple')
}, 2 * 1000)
setTimeout(function(){
addThing('avocado')
}, 3 * 1000)
setTimeout(function(){
addThing('cheese')
}, 4 * 1000)
}
});
我有一个修改数组的 Ractive 实例。当数组中出现新值时,我希望突出显示相应的元素。我目前通过在新创建的元素上设置一些样式来做到这一点。 这里是 jsfiddle。
var ractive = new Ractive({
el: 'main',
template: `
<h1>Hello {{name}}!</h1>
{{ #things:index }}
<p>{{ things[index] }}</p>
{{ /things }}
`,
data: function(){
return {
things: [
'banana',
'carrot'
]
}
},
oncomplete: function(){
var component = this;
setTimeout(function(){
component.set('things', ['apple', 'banana', 'carrot'])
}, 5 * 1000)
}
});
唯一的问题是,由于 ractive 重复使用元素,样式出现在错误的元素上。
您会看到当 'banana', 'carrot']
更改为 ['apple', 'banana', 'carrot']
时,突出显示 'carrot'
元素,而不是与新值对应的 'apple'
元素。
在数组中设置新条目样式的最佳方式是什么?
你应该使用 splice
方法
component.splice('things', 0, 0, 'apple'); // Add at zero index
component.splice('things', 1, 0, 'apple'); // Add at first index
而不是再次设置整个数组。这相当于 Array.splice
方法。
整个代码如下所示。
var ractive = new Ractive({
el: 'main',
template: `
<h1>Hello {{name}}!</h1>
{{ #things:index }}
<p>{{ things[index] }}</p>
{{ /things }}
`,
data: function(){
return {
things: [
'banana',
'carrot'
]
}
},
oncomplete: function(){
var component = this;
setTimeout(function(){
component.splice('things', 0, 0, 'apple');
}, 5 * 1000)
}
});
在此处阅读更多相关信息。
https://ractive.js.org/api/#ractivesplice
使用 recentlyAddedThings
缓存来添加已添加项目的缓存。这是一个 working jsfiddle:
var ractive = new Ractive({
el: 'main',
template: `
{{ #things:index }}
<p class="{{ #if recentlyAddedThings.includes(things[index]) }}new{{ /if }}">
{{ things[index] }}
</p>
{{ /things }}
`,
data: function(){
return {
things: [
'banana',
'carrot'
],
recentlyAddedThings: [
]
}
},
oncomplete: function(){
var component = this;
var addThing = function(newThing){
var things = component.get('things')
var newThing = newThing
things.push(newThing)
component.set('things', things.sort())
component.push('recentlyAddedThings', newThing)
}
setTimeout(function(){
addThing('apple')
}, 2 * 1000)
setTimeout(function(){
addThing('avocado')
}, 3 * 1000)
setTimeout(function(){
addThing('cheese')
}, 4 * 1000)
}
});