2016-07-17 211 views
1

我有一個MobX存儲和一個反應原生類的設置和工作,但沒有按照預期。我觀察到的用戶偏好在UserPreferencesStore像這樣的列表:MobX - 將參數傳遞爲可觀察的可變觀察值?

class UserPreferencesStore { 
    @observable userPreferences = { 
     receive_upvotes_mail: 0, 
     receive_answers_mail: 0, 
     receive_comments_mail: 1 
    } 
} 

在反應機類,我想更新基礎上的TouchableHighlight onPress這樣的上述觀測:

<TouchableHighlight onPress={() => this.onPressPreference('receive_upvotes_mail')}> 
    <Image source={require('images/Email.png')} 
      style={UserPreferencesStore.userPreferences.receive_upvotes_mail == 1 && styles.active} /> 
</TouchableHighlight> 

<TouchableHighlight onPress={() => this.onPressPreference('receive_answers_mail')}> 
    <Image source={require('images/Email.png')} 
      style={UserPreferencesStore.userPreferences.receive_answers_mail == 1 && styles.active} /> 
</TouchableHighlight> 

<TouchableHighlight onPress={() => this.onPressPreference('receive_comments_mail')}> 
    <Image source={require('images/Email.png')} 
      style={UserPreferencesStore.userPreferences.receive_comments_mail == 1 && styles.active} /> 
</TouchableHighlight> 

和這裏是onPressPreference操作以更新不起作用的觀...

@action onPressPreference = (preferenceName) => { 
    // alert(preferenceName); 
    UserPreferencesStore.userPreferences.preferenceName = UserPreferencesStore.userPreferences.preferenceName == 0 ? 1 : 0; 
} 

的當警報顯示它時,參數會得到完美的傳遞,但在「追加」這裏UserPreferencesStore.userPreferences.preferenceName更新傳遞的首選項可觀察商店值時,它似乎不起作用。但是,如果我創建了3個動作,每個動作都有一個,並且觸發它們onPress,那麼它就可以工作,而且observable可以在商店中正確更新值,但是它重複了很多代碼,而且我真的很想獲得它將傳遞的參數用於單個動作。

任何想法如何讓傳遞的參數與單個動作一起工作來更新相應的observable的值?

+0

你的問題是關於ECMAScript,其實不是關於MobX – Alik

回答

3

您需要使用括號表示法來訪問具有變量名稱的屬性。 UserPreferencesStore.userPreferences[preferenceName] = UserPreferencesStore.userPreferences[preferenceName] == 0 ? 1 : 0;

+0

謝謝,我沒有意識到這一點。今天學到了新東西:) – Wonka

相關問題