【问题标题】:How can I access variable defined in another method in Polymer 1.0?如何访问 Polymer 1.0 中另一种方法中定义的变量?
【发布时间】:2016-05-19 10:34:51
【问题描述】:

我想访问在我的 Polymer 元素的 ready() 中定义的属性(如以下代码所示):

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
  }
});

但我收到以下错误:

未捕获的类型错误:无法读取未定义的属性“名称”

对于这一行:

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

我该如何解决这个问题?

【问题讨论】:

  • tasks 是一个数组。使用任务[0]。并且 tasks 不是要解析的 json 字符串。也许你应该在使用聚合物之前正确学习js。

标签: json parsing polymer polymer-1.0 uncaught-exception


【解决方案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>

【讨论】:

  • +1 谢谢(不能投票,因为没有足够的积分)。尽管它引发了另一个错误,但它仍然有效:VM416:1 Uncaught SyntaxError: Unexpected token 'O' in JSON at position 0 **as this.tasks[0].task.name returns OTS **
  • @Shikha 那是因为这里没有涉及 JSON,你不需要将你的对象或字符串解析为 JSON。
  • 如果回答对您有帮助,请采纳以表示感谢:)
猜你喜欢
  • 2019-07-31
  • 1970-01-01
  • 2020-02-20
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多