2016-08-01 4 views
2

私は次の観測可能な配列の検索エンジンを持っています。MobX - 配列内の単一項目を選択し、他の項目はすべて選択解除しますか?

@observable favoriteSearchEngine = [ 
    { 'provider' : 'google', 'selected': true }, 
    { 'provider' : 'yahoo', 'selected': false }, 
    { 'provider' : 'bing', 'selected': false }, 
]; 

ユーザーはUIからの時間で選択1にできるはずです。

@action onClickFavoriteSearchEngine = (provider) => { 
    alert(provider); // yahoo shows here 
    // How to do this step, only selected provider true and falsify all others in the array? 
} 

答えて

2

@mweststrateによって与えられた解決策は素晴らしい作品が、あなたはも)transactionあるactionを(使用しているので、以前選択したものを選択解除して、新しいものを選択することができます。

@action onClickFavoriteSearchEngine = (provider) => { 
    alert(provider); // yahoo shows here 

    favoriteSearchEngine.forEach(e => e.selected = false); 
    favoriteSearchEngine.find(e => e.provider === provider).selected = true; 
} 
+1

トランザクションでうまく動作します、ありがとうTholle! – Wonka

1

私は、単一の観測可能表す選択を導入し、選択された状態を導き出すでしょう:だから彼らは例えばyahooを選択した場合、ヤフーはselected: trueと、他のプロバイダーになるだろうselected: false

このアクションは、クリックを処理になるだろう

@observable selection = null 
@observable favoriteSearchEngine = [ 
    { 'provider' : 'google', 'selected': function() { 
     return selection === this 
    } 
] 

あなたは今、選択範囲に数回、別のエンジンを割り当てた場合、あなたはエンジンのselected状態が応じて更新することがわかります。それから、 ly

(N.B. )thisの問題を避けるために、このようなプレーンなオブジェクト+派生を宣言する場合は、矢印の機能を使用していない

+0

どういうわけか動作しませんでした。 '@ observable selection = null'あなたはアクションを行い、' this.selection = provider'を割り当てますか?私は試しましたが、動かなかったのです。私は完全に理解しているとは思わない:( – Wonka

+0

確かに、あなたの問題を示すフィドルを作成することができますか?例えば、フォーク:http://jsbin.com/qusoye/2/edit?html,css 、js、出力 – mweststrate

+0

のようなものを指定してください: 'favoriteSearchEngine [0]'(または参照の代わりに名前ベースで一致するように計算されたプロパティを変更してください) – mweststrate

関連する問題