«ReferenceError: не определено» доступ к переменной в JavaScript - PullRequest
0 голосов
/ 09 мая 2019

Как сделать переменную с именем - val1090 , определенную в validator.js доступной из runesMetadata.js ?

Я использую nativescript vuejs, и это метаданные для raddataform, если это имеет значение в этом случае.

Я получил ошибку [Vue warn]: Error in data(): "ReferenceError: val1090 is not defined" JS: found in JS: ---> <Runes> JS: <NavigationEntry>

runesMetadata.js

import validator from "./validator";

export default {
  mixins: validator,
  data () {
      return {
        makeRuneMetadata: {
          'isReadOnly': false,
          'commitMode': 'OnLostFocus',
          'validationMode': 'Immediate',
          'propertyAnnotations':
          [ 
            {
              'name': 'r_makeRuneSpell',
              'displayName': 'Make rune spell',
              'index': 0,
              'editor': 'Text',
            },
            {
              'name': 'r_mpAbove',
              'displayName': 'If MP above [%]',
              'index': 1,
              'editor': 'Number',
               val1090, // <--------------------------
            },


      }
  }
}

validator.js

const val1090 = {
    'validators': [
        {
            'name': 'RangeValidator',
            'params': {
                'minimum': 10,
                'maximum': 90,
                'errorMessage': 'Value must be between 10-90.',
            }
        },
    ]
  }

export default val1090

** ИЗДАНО НИЖЕ **

, чтобы валидатор содержал больше объектов, подобных этому

onst val1090 = {

            'name': 'RangeValidator',
            'params': {
                'minimum': 10,
                'maximum': 90,
                'errorMessage': 'Value must be between 10-90.'
            }  

};

const val115 = {

    'name': 'RangeValidator',
    'params': {
      'minimum': 1,
      'maximum': 15,
      'errorMessage': 'Value must be between 1-15.'
    }  

};


export default{
    val1090,
    val115
}

и в моем компоненте я сделал

created() {
    console.dir(val1090);
  },

так что это дает мне

==== object dump start ====
JS: val1090: {
JS:   "name": "RangeValidator",
JS:   "params": {
JS:     "minimum": 10,
JS:     "maximum": 90,
JS:     "errorMessage": "Value must be between 10-90."
JS:   }
JS: }
JS: val115: {
JS:   "name": "RangeValidator",
JS:   "params": {
JS:     "minimum": 1,
JS:     "maximum": 15,
JS:     "errorMessage": "Value must be between 1-15."
JS:   }
JS: }
JS: ==== object dump end ====  

как получить только то, что содержит объект val1090? только это я хочу

{
JS:   "name": "RangeValidator",
JS:   "params": {
JS:     "minimum": 10,
JS:     "maximum": 90,
JS:     "errorMessage": "Value must be between 10-90."
JS:   }
JS: }

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Наличие только имени свойства в инициализаторе объекта, т. Е. Просто val1090 - это новый ES6 + "сокращение" для val1090:val1090 см. Документы MDN ..., чтобы это работало, ДОЛЖНА быть переменнаяобъявляется как val1090 ... что не так в вашем коде

например,

var a = 'foo', b = 42, c = {};
var o = {a, b, c};

работает, потому что a, b и c объявлены как переменные

var a = 'foo', b = 42;
var o = {a, b, c};

терпит неудачу, потому что c не объявлен

0 голосов
/ 09 мая 2019

Вы экспортировали val1090 по умолчанию, поэтому при вызове этого

import validator from "./validator"

вы объявляете переменную validator, содержащую то, что экспортируется по умолчанию в файле валидатора.Это означает, что validator - это переменная, содержащая

    {
     'validators': [
        {
            'name': 'RangeValidator',
            'params': {
                'minimum': 10,
                'maximum': 90,
                'errorMessage': 'Value must be between 10-90.',
           }
        },
    ]
  }

Таким образом, вы должны использовать validator вместо val1090 в вашем runesMetadata.js или изменить первую строку на

import val1090 from "./validator"

РЕДАКТИРОВАТЬ: Если ваш валидатор имеет больше объектов, он работает так же.Значение export default будет содержаться в переменной, которую вы импортируете.так что если вы экспортируете это:

export default {
    val1090,
    val115
}

и импортируете это так:

import validator from "./validator"

Вы в основном создаете переменную variable с этим значением:

validator = {
    val1090: val1090,
    val115: val115
}

И получить доступ к значению val1090 можно следующим образом:

validator.val1090
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...