Как я могу получить доступ к переменной, определенной в другом методе в Polymer 1.0?

Я хочу получить доступ к свойству, определенному в ready() моего элемента Polymer (как видно из следующего кода):

Polymer({
  is: 'my-list',

  ready: function() {
    this.tasks = [{
       "task": {
          "name": "OTS",
          "rules": [{"name": "rule 1", "id": "1"}]
       }
    }];

    this.parseJson();
  },

  parseJson: function() {
    this.taskname = JSON.parse(this.tasks.task.name); // errors here
  }
});

Но я получаю следующую ошибку:

Uncaught TypeError: Невозможно прочитать свойство 'name' из неопределенного

для этой строки:

JSON.parse(this.tasks.task.name);

Как это исправить?

1 ответ

this.tasks это массив объектов, но parseJson() не использует правильный синтаксис для доступа к элементам массива.

parseJson() следует использовать this.tasks[0].task.name при условии, что ваш реальный код может иметь более одной задачи и вас интересует только первая. Кроме того, вам не нужно использовать JSON.parse(), поскольку имя задачи не является строкой JSON.

Вот рабочая демонстрация:

Polymer({
  is: 'my-list',

  ready: function() {
    this.tasks = [{
      "task": {
        "name": "Task1",
        "rules": [{
          "name": "rule 1",
          "id": "1",
        }]
      }
    }];

    this.parseJson();
  },

  parseJson: function() {
    this.taskname = this.tasks[0].task.name;
    console.log(this.taskname);
  }
});
<head>
  <base href="https://polygit.org/polymer+:master/components/">
  <script src="webcomponentsjs/webcomponents-lite.min.js"></script>
  <link rel="import" href="polymer/polymer.html">
</head>

<body>
  <my-list></my-list>
</body>

Другие вопросы по тегам