いくつかのオプション:
.update()
他のインスタンスに更新するように指示するために使用します。
var r2 = new Ractive({ el:.., template:..., data:data })
r2.set('text', 'New Text');
r1.update(/*'text'*/)
変更イベントを使用して、これをもう少し進めることができます。
var r2 = new Ractive({ el:.., template:..., data:data })
r2.on('change', function(e){
r1.udpate()
//or to be more specific:
Object.keys(e).forEach(key, function(){
r1.update(key)
})
})
@Rich_Harris はこの概念をさらに発展させ、Ractive アダプターを作成しました。
var r2 = new Ractive({ el:.., template:...,
data: r1,
adapt: ['Ractive'] })
配列の双方向サポートにはまだいくつかの穴がありますが、これは良いスタートです。
IE8 のサポートが不要で、すべてのブラウザーが defineProperty をサポートしている場合は、マジック モードを使用できます。
var data = { text:'Old Text'};
var r1 = new Ractive({ data:data, magic: true })
r1.observe('text', function(value){
console.log('r1 says', value)
});
var r2 = new Ractive({ data:data, magic: true })
r2.observe('text', function(value){
console.log('r2 says', value)
});
r2.set('text', 'New Text')
data.text = 'Yep, this works too'
最後に、Ractive をレベルアップして、コンポーネントとしてこれら 2 つのビューの親にすることを検討してください。
<div>
<r1-component data="{{.}}"/>
<r2-component data="{{.}}"/>
</div>
(ただし、レイアウトは変わります)。多くの場合、Ractive が管理を支援するトップレベルのやり取りが発生するため、これが最も効果的であることがわかりました。