Data binding 什么';聚合物1.x中与[[var]]和{{var}}结合的区别是什么?

Data binding 什么';聚合物1.x中与[[var]]和{{var}}结合的区别是什么?,data-binding,polymer,2-way-object-databinding,polymer-1.0,Data Binding,Polymer,2 Way Object Databinding,Polymer 1.0,我熟悉使用大括号的绑定,比如Polymer 0.5中的{{variable} 然而,在Polymer发行版的示例和代码片段中,我开始注意到使用方括号的绑定,例如[[variable]]] {{variable}}现在的意思是不同的,还是相同的,[[variable]]]只是一个加法在Polymer中绑定到[[variable]]和{{variable}}有什么区别?正如您所注意到的,现在数据绑定有两种不同的语法,它们有不同的用途: {{variable}}表示您希望Polymer自动检测绑定是

我熟悉使用大括号的绑定,比如Polymer 0.5中的
{{variable}

然而,在Polymer发行版的示例和代码片段中,我开始注意到使用方括号的绑定,例如
[[variable]]]


{{variable}}
现在的意思是不同的,还是相同的,
[[variable]]]
只是一个加法在Polymer中绑定到
[[variable]]
{{variable}}
有什么区别?

正如您所注意到的,现在数据绑定有两种不同的语法,它们有不同的用途:

  • {{variable}}表示您希望Polymer自动检测绑定是单向还是双向
  • [[variable]]表示您只希望绑定到单向
为什么要改变? Polymer 1.x与旧版本的不同之处在于,绑定现在默认为单向的,这与0.5非常不同,后者总是双向的

换句话说,如果你写


那么默认情况下

  • myVariable被更改,Polymer更新绑定,从而更新
    myelement
    someProperty
  • someProperty已更改,Polymer不会更新绑定到
    myVariable
除非在
my元素
中的属性上设置
notify:true
,否则情况始终如此

聚合物({ 是‘我的元素’, 特性:{ someProperty:{ 通知:正确, ... 使用
notify:true
,绑定现在是双向的,因此

  • myVariable已更改,Polymer将绑定更新为
    someProperty
  • someProperty已更改,Polymer也将更新绑定到
    myVariable
这种行为(在使用
notify:true
时)在0.5中曾经是默认的;现在您必须明确要求它

何时使用[[变量]] 没有技术上的理由说明你必须使用
[[variable]]
,因为Polymer会自动检测绑定是单向的还是双向的
{variable}
。那么你为什么要使用它呢

假设您在一个大型项目中工作,并且您知道,根据数据在特定页面/元素中的流动方式,某个属性决不应被绑定到的元素更改,例如,对于一个功能上用作标签的元素:


...
一切看起来都很好。
data
属性绑定到
display data
元素和
data editor
元素,并将在它们之间自动共享。(在本例中,假设
display data
的唯一目的是预览它绑定到的数据。)

有一天,您或其他人正在编辑
显示数据
,而您忘记了在上面使用它的情况。对于一个完全不同的用例,您或其他开发人员希望
显示数据
也格式化或以其他方式修改它所提供的数据,并将其推回到可能出现的任何其他元素绑定到它。您/他们编辑
显示数据
,如下所示:

  • notify:true
    添加到
    sourceData
    ,以允许双向数据绑定
  • 将代码添加到
    display data
    中,这将修改
    sourceData
    属性
这对于所有需要此功能的页面都非常有用。但是在前面提到的页面上,这并不是故意的,最终会混淆
数据编辑器
看到的数据

如果:

  • 开发团队进行了更好的沟通,并且更加考虑了元素的使用位置
  • 和/或在相关页面/元素中使用了[[data]]而不是
    {{data}


...
数据编辑器
可以更改
数据
,但是
显示数据
只能读取
数据
,并且在更改其
源数据
属性的值时无法更改其值,即使在
源数据
上设置了
通知:true

因此,可能是一个好主意:

  • 每当需要绑定到
    变量时,请使用[[variable]]。这样,您就可以强制执行数据在元素/页面/应用程序中流动的方向
  • 只要知道绑定必须是双向的,就使用{{variable}
根据,

为了使代码更易于阅读,您可能希望在默认情况下使用[[property]]表单,并且仅对双向绑定使用{{property}

尽管如此,这最终取决于选择。如果你想放弃使用
[[variable]]]
,没有人阻止你,你也不会开火