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语法吗?