2017-01-24 2 views
0

Ich habe einen MobX-Speicher wie die folgende Store Klasse. Wenn ich auf this.user.permits.db zugreifen möchte, erhalte ich einen Fehler, der this.user undefiniert ist. Ich frage mich, warum ich nicht auf die @observable user zugreifen kann.Zugriff auf eine Variable innerhalb derselben Klasse nicht möglich

src/ui/store/store.js Datei:

import { action, observable } from 'mobx' 

import { useStrict } from 'mobx'; 
useStrict(true); 

class Store { 
    constructor(){ 
     // 
    } 
    @observable user 

    @action setUser=(user)=>{ 
     this.user=user 
    } 

    @observable menus=[ 
     {menu1: 'DATABASE', 
     /*menu2s: ['PC', 'NETWORK', 'TEL', 'PTT'],*/ //-> this line works fine 
     menu2s: this.user.permits.db, //-> this line gives an error: Cannot read property 'permits' of undefined 
     } 
    ] 
} 

export default new Store 

src/ui/ui.js Datei, die Speicher von store.js importiert:

import React from 'react' 
import ReactDOM from 'react-dom' 

import Layout from './components/layout.js' 

import Store from './store/store.js' 

//user comes from HTTP GET request 
Store.setUser(user) 

ReactDOM.render(<Layout store={Store}/>,document.getElementById('ui')) 

src/views/profile.ejs Datei, user zu JavaScript vorbei:

enter image description here


UPDATE:

<!DOCTYPE html> 
<html lang='en'> 

<head> 
    <title>User profile</title> 
    <link href="/css/style.css" rel="stylesheet" type="text/css"> 
</head> 

<!-- 
Pass variables from http GET to JavaScript 
also block script injection attacks 
ref: https://stackoverflow.com/a/16098699/7312233 
--> 
<script> 
    function htmlDecode(input){ 
     var e=document.createElement('div'); 
     e.innerHTML=input; 
     return e.childNodes.length===0?"":e.childNodes[0].nodeValue; 
    } 
    var user=JSON.parse(htmlDecode("<%= JSON.stringify(user) %>")); 
</script> 

<div id="ui"></div> 

<script src="/js/ui.bundle.js"></script> 

</html> 

A permits Feld auf einem Dokument Benutzer Probe auf CouchDB Benutzerdatenbank wie unten definiert ist

Auch this sollte ebenfalls korrigiert werden.

Antwort

1

this.user wird nicht festgelegt, wenn Sie Ihre Klasse deklarieren, daher wird this.user.permits zu einem Fehler führen. Sie könnten stattdessen so etwas tun:

+0

Ich habe versucht, aber sieht aus wie das Problem hängt damit zusammen, wie CouchDB ein Feld eines Dokuments paresiert. 'console.log ('user.permits:' + user.permits)' Ausgabe ist 'user.permits: {db: ['TEL', 'PTT',]}' und 'console.log ('user.permits. db: '+ user.permits.db) 'zeigt' user.permits.db: undefined' – user3405291

+0

Daher ist 'user.permits' gut, aber' user.permits.db' kann nicht aufgerufen werden. – user3405291

+1

In Verbindung mit [diese Antwort] (http://stackoverflow.com/a/41829238/7312233) hat Ihre Lösung funktioniert, danke! – user3405291

Verwandte Themen