Javascript 聚合物中的私有状态变量

Javascript 聚合物中的私有状态变量,javascript,polymer,web-component,Javascript,Polymer,Web Component,在聚合物元件中存储私有状态属性的推荐做法是什么?例如,仅对内部呈现有意义的属性(例如,一些布尔标志指示元素的哪些部分被呈现,或者从dom repeat可以迭代的对象构建的临时数组)。它们并不意味着通过元素的API公开,而是仅供内部使用 到目前为止,我一直在做的是声明属性,这些属性可以通过properties对象中的元素API使用,而在ready和其他函数(例如this.\u tempArray=[])中设置了“private”属性,而无需在properties中明确声明它们。我不知道这是不是个好

在聚合物元件中存储私有状态属性的推荐做法是什么?例如,仅对内部呈现有意义的属性(例如,一些布尔标志指示元素的哪些部分被呈现,或者从
dom repeat
可以迭代的对象构建的临时数组)。它们并不意味着通过元素的API公开,而是仅供内部使用

到目前为止,我一直在做的是声明属性,这些属性可以通过
properties
对象中的元素API使用,而在
ready
和其他函数(例如
this.\u tempArray=[]
)中设置了“private”属性,而无需在
properties
中明确声明它们。我不知道这是不是个好主意

<dom-module id="test">
  <template>
    <style>

    </style>

    <template is="dom-if" if="[[_isDataReady]]">

    </template>

  </template>

  <script>
    (function() {
      'use strict';

      Polymer({
        is: 'test',

        properties: {
          dataUrl: {
            type: String
          }
        },

        ready: function() {
          this._isDataReady = false;
          this._tempArray = [];

          // Get data asynchronously from dataUrl
          // ...
        }
      });
    })();
  </script>
</dom-module>

(功能(){
"严格使用",;
聚合物({
是:"测试",,
特性:{
数据URL:{
类型:字符串
}
},
就绪:函数(){
这是。_isDataReady=false;
这个。_tempArray=[];
//从dataUrl异步获取数据
// ...
}
});
})();

执行此操作的最佳方法是将属性声明为普通属性,但在名称前使用下划线(u41;前缀,并将属性设置为只读,以便外部使用者无法覆盖变量

例如:

properties: {
    _isDataReady: {
        type: Boolean,
        value: false,
        readOnly: true
    }
}

ready: function () {
    ...
    this.async(function () {
        //Some async logic
        ...
        this._set_isDataReady(true); //You will need to use this special generated setter to set the value
    );
}

这种方法向消费者传达,他们不应该使用此属性,因为它是内部的,并且只读属性可以防止在正常工作流之外错误地设置该属性

我也是这么做的,只是在变量名前加一个下划线,从语义上表明变量是私有的。这是一个有趣的方法,谢谢。您确定生成的setter应该是
\u setIsDataReady
,因为
isDataReady
有前缀吗?很好。设定器应为_set _isDataReady