Как я могу получить доступ к переменной, определенной в другом методе в 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>