【发布时间】:2026-01-30 10:50:01
【问题描述】:
在 Ractive.js 中,如何将属性附加到传递给组件的数组中的每个对象,而不使它们可用于父 Ractive 对象?
一个组件可能想要添加额外的属性来帮助它管理它自己的内部状态。这是一个作为选项卡控件的示例组件。
组件 JS
var tabComponent = Ractive.extend({
isolated: true,
template: '#tabTemplate',
data: function(){
return {
items: [] // contains objects in this format { text: "title", detail: "detail" }
};
},
onrender: function() {
// add the extra property the component needs to be able to work
for(var i = 0; i < this.get('items').length; i++){
this.set('items[' + i + '].selected', false);
}
this.on('toggle', function(event){
var keypath = event.keypath + '.selected';
this.set(keypath, !this.get(keypath));
});
}
});
组件模板
<ul>
{{#items}}
<li>
<header class="tabHeader" on-click="toggle">{{text}} - Click to toggle!</header>
<div class={{selected ? '' : 'hidden'}}>{{detail}}</div>
</li>
{{/items}}
</ul>
然后,父 Ractive 对象可以在其模板中使用这样的组件。
<tab-control items="{{myItems}}"></tab-control>
父 Ractive 对象现在可以看到这个额外的属性,纯粹是为了组件内部工作而添加的。如果父 Ractive 对象想要序列化 ajax 调用的数据,这会很烦人,因为它现在必须知道组件内的属性。有没有办法阻止这些特定于组件的数据属性在其自身之外变得可用?
我添加了一个example here。当您将模型打印到控制台窗口时,您可以在数组中的每个项目上看到“选定”属性。
【问题讨论】:
标签: ractivejs