Polymer 聚合物元素使用getter/setter声明可绑定属性的最简单方法?

Polymer 聚合物元素使用getter/setter声明可绑定属性的最简单方法?,polymer,Polymer,使用聚合物元素的属性属性或发布块,很容易创建其底层存储被自动管理的属性。然而,经常会出现这样的情况:属性的值不是简单地存储和检索的。例如,属性的值可能取决于其他元素状态。另一个示例:可绑定但只读的属性 在这种情况下,最好能够使用getter/setter对定义属性。但是,如何将结果属性声明为可绑定的还不清楚。如果属性名包含在属性或发布中,则不会使用getter/setter。如果未声明属性名,则它似乎不可绑定。由属性/发布产生的默认属性行为只支持onChanged处理程序;没有办法拒绝设置属性的

使用聚合物元素的
属性
属性或
发布
块,很容易创建其底层存储被自动管理的属性。然而,经常会出现这样的情况:属性的值不是简单地存储和检索的。例如,属性的值可能取决于其他元素状态。另一个示例:可绑定但只读的属性

在这种情况下,最好能够使用getter/setter对定义属性。但是,如何将结果属性声明为可绑定的还不清楚。如果属性名包含在
属性
发布
中,则不会使用getter/setter。如果未声明属性名,则它似乎不可绑定。由
属性
/
发布
产生的默认属性行为只支持onChanged处理程序;没有办法拒绝设置属性的尝试(例如,在setter中),也没有办法在检索值时运行getter

我假设这里的任何解决方案都需要搁置Polymer的声明性语法,从头开始构建。我试了一下这个:。这是可行的,但我想知道是否有更简单的方法。例如,是否可以定义一个getter/setter(或只是getter)并通过
publish
块公开它


(旁白:在这个例子中有一点,我希望能够引用命名元素构造函数,但它在
就绪期间似乎不可用)

我无法理解您的完整问题,但在聚合中使用具有publish属性和属性的getter非常容易,请参考下面的代码示例

<polymer-element name="blog-element"  attributes="owner ownnerfullname">
<template >
  <div><span>{{owner}}</span></div>
      <div><span>{{ownnerfullname}}</span></div>
      </template>
 <script>
    Polymer('blog-element', {
       publish: {
        owner: 'I am foo!',
        get ownnerfullname(){return this.owner + "changes";}
      },


    });
  </script>
</polymer-element>

{{owner}}
{{ownnerfullname}
聚合物('blog-element'{
出版:{
店主:“我是福!”,
get-OwnerFullName(){返回this.owner+“更改”;}
},
});
有几点:

  • 到目前为止,您无法发布getter,因为聚合物没有 支持它的机器。我们将来可能会改进这一点,但这是不可能的 看起来不那么重要,因为你可以用计算机做类似的工作
    属性和观察者。肯定有计划要进行 作为一种正式的计算属性语法,这应该会让事情更清楚一些

  • 一般来说,你不应该试着去观察一个getter,因为 注)
    对象。观察
    无法知道值是否已更改 (令人困惑的是,它通常在
    observe.js
    polyfill下工作,因为 关于脏检查;即使如此,脏检查getter也是一个坏主意 因为getter可能是一个任意昂贵的计算 [例如,可能使用
    offsetWidth
    并强制样式重新校准])

  • 不支持将可绑定属性设置为只读。Polymer采用了一种不寻常的方法,默认情况下,数据绑定是双向的。选择这种方法是为了减少开发人员的认知负载(数据不会传播,所有绑定属性总是反映相同的值)。另一方面,观察的副作用总是不同步的。在下面的jsbin中,我将
    count
    设置为只读,但仅限于在尝试设置私有值时,它会异步捕捉回私有值


刚刚意识到,即使是给定的jsbin也不能完全工作。如果尝试将测试元素嵌入到另一个元素中,然后绑定到测试元素的
count
属性,则绑定不起作用;我不知道您可以在发布块中定义getter。但就我所见,当元素的内部状态更改时,与getter(如ownerfullname)的绑定不会自动更新。元素无法指示内部状态已更改。感谢提供信息。我有很多情况下,允许人们绑定到只读属性会有所帮助。我特别感兴趣的是支持那些想要编写标记而不是JavaScript的用户。对于这样的用户,观察者没有帮助,因为他们需要代码。相反,我希望让这些用户以声明方式设置绑定。我希望你们支持(可绑定的)计算属性的计划能够继续推进,并期待着看到它们的形成。现在还不清楚你们如何想象用户不使用JavaScript创建计算属性。也许你可以进一步解释。我希望组件作者(生产者)能够用JavaScript编写组件,公开计算的只读属性。我希望这些组件的用户(消费者)能够绑定到标记中的那些属性。“肯定有一个正式的计算属性语法计划正在进行中,这会让事情变得更清楚。”这就是Polymer 1.0语法吗?