【问题标题】:Data binding/updating between parent and child using <content> tag in Polymer1.0在 Polymer1.0 中使用 <content> 标签在父子之间进行数据绑定/更新
【发布时间】:2017-06-15 11:12:46
【问题描述】:

我有一个滑块元素,其中包含幻灯片列表和一个 img 以显示悬停的幻灯片,如下所示。我在custom-slide(child) 和custom-slider(parent) 之间绑定currentImage

案例一

custom-slider.html

<template>
    <div>
       <custom-slide current-image="{{currentImage}}"></custom-slide>
       <custom-slide current-image="{{currentImage}}"></custom-slide>
       <custom-slide current-image="{{currentImage}}"></custom-slide>
    </div>
    <img src="{{currentImage}}">
</template>

我这样用的时候效果很好。

index.html

<body>
    <custom-slider>
    </custom-slider>
</body>

但是当我如下所示更改 indexcustom-slider html 时,它不起作用。悬停的custom-slide 未显示在img 标记中。没有更新。

案例二

index.html

<body>
    <custom-slider>
       <custom-slide current-image="{{currentImage}}"></custom-slide>
       <custom-slide current-image="{{currentImage}}"></custom-slide>
       <custom-slide current-image="{{currentImage}}"></custom-slide>
    </custom-slider>
</body>

custom-slider.html

<template>
    <div>
       <content select="custom-slide, [custom-slide]"></content>
    </div>
    <img src="{{currentImage}}"></custom-slide>
</template>

控制台中也没有错误。

我有一个名为currentImage 的属性,用于custom-slidecustom-slider,如图所示,甚至我对属性使用了notify: true

currentImage: {
   type: String,
   value: 'some_image_url_by_default',
   notify: true
}

mouseovercustom-slide 我有一个事件是更新custom-slider 中的customImage。图片 url 在custom-slide 中更新,但在custom-slider 中没有更新。只有当我使用我的问题的第一个案例代码时,它才会更新。

更新

当我在任何自定义元素的模板中直接绑定时,绑定就可以工作了。但是,当我间接绑定时,即使用 &lt;content&gt; 标签,则绑定不起作用。例如,

<parent-elem></parent-elem> // custom element

父元素模板

<dom-module id="parent-elem">
  <template>
    <div>{{name}}</div>
  </template>
  // Assume here in script I have a property name
</dom-module>

就像上面一样,它正在工作。

但在上面的代码中,如果我将&lt;div&gt;{{name}}&lt;/div&gt; 替换为&lt;content&gt;&lt;/content&gt; 并更改

<parent-elem>
   <div>{{name}}</div>
</parent-elem> // custom element

然后绑定不起作用。为什么?那么有&lt;content&gt;标签有什么用呢?

编辑

Plunker with problem

在那个 plunker 中,通过将图像悬停来检查图像。前三个没有内容标签,接下来的三个是使用内容标签。给我解决方案。帮助将不胜感激。

【问题讨论】:

  • binding 如何在 HTML 中工作?由于index.html 不是聚合物元素,因此您无法在其中绑定属性。正如@KubaŠimonovský 指出的那样,您还需要将currentImage 传递给custom-slider
  • &lt;img src="{{currentImage}}"&gt;&lt;/custom-slide&gt; 这是仅在 SO 中的错字还是在您的代码中?
  • 这只是 SO 中的一个错字。但我尝试了@KubaS 的回答,但没有奏效
  • 它不起作用的原因是因为您在index.html 中尝试过它而不是聚合物元素。如果您想在 index.html 中执行此操作,请尝试使用 dom-bind
  • 肯定的是,您应该使用&lt;img src$="{{currentImage}}" /&gt;,因为如果您不添加$ 十,它会尝试使用元素类属性来共享值,但是使用$ 它是使用 HTML 属性。同样@a1626 是对的,在index.html 中使用dom-bind

标签: html polymer polymer-1.0


【解决方案1】:

Here 是您当前 plunkr 的一个分支。我对其进行了两次更改。

  • index.html 包围在dom-bind 中,这样聚合物结合才能起作用。
  • 用绑定替换了 current-image 的硬编码值 phone-carousel,以便可以在悬停时更新

希望这就是您要找的。​​p>

【讨论】:

  • 是的。非常感谢。你是真正值得投票和赏金的人。我的问题的英雄
  • 我会在 2 小时后给予赏金
  • 但我不明白一件事,我不知道为什么有些人对这个问题投了反对票。这是不好的提问方式吗?我尽力问了
  • 请详细说明
  • 投反对票的理由有很多。您可能已经得到了其中的一些,因为之前没有足够的代码来重现该问题。
【解决方案2】:

您没有将currentImage 设置为custom-slider,而只是设置为custom-slide。所以在custom-slider 里面你不会找到那个属性。这可能就是您要寻找的问题。

将您的代码编辑为:

<custom-slider current-image="{{currentImage}}">
   <custom-slide current-image="{{currentImage}}"></custom-slide>
   <custom-slide current-image="{{currentImage}}"></custom-slide>
   <custom-slide current-image="{{currentImage}}"></custom-slide>
</custom-slider>

编辑

问题是您不能在index.html 中做这些事情,您需要将其包装到另一个文件中,该文件将存储currentImage 属性并通知更改。所以我唯一做的就是将index.html 中的所有内容包装到我称为wrapper-elements 的新文件中(将其更改为您想要的任何水) 我还编辑了一些东西让它更简单,所以不要做 ctrl+c 和 ctrl+v。只需复制 wrapper-elements 元素即可。

这里正在工作 plnkr:https://plnkr.co/edit/eElf4H6CQOVhahShyjBF?p=preview (我希望它是正确的链接。我从来没有在 plnkr 做过什么)

【讨论】:

  • 当你说只是不工作时真的很难提供帮助。什么不工作。属性不存在,或图像未显示或什么。这里需要更多信息
  • 图片未显示。 custom-slide 中的图像正在显示,但在悬停时我将其显示在另一个 div 右侧,没有显示
  • 哦,我明白了。不幸的是,我现在不知道如何解决这个问题。提供工作的 jsbin 会有很大帮助。您使用的是旧聚合物,所以我无法尝试 :(
  • 请创建一个 Codepen 或 Jsbin 来签入您的代码。
  • paper-carousel 已缩小代码,因此无法从中读取内容。也许他正在使用自定义事件(这是另一种方法)。聚合物中有内置方法,例如fire。你可以fire 一些事件,然后在其他地方听他的。所以它没有使用绑定。而且它也更具可定制性,因为在项目中的任何地方,您都可以触发一些事件,图像会发生变化,但您可以自己了解它。
猜你喜欢
  • 2021-08-31
  • 2020-06-28
  • 2015-10-25
  • 1970-01-01
  • 2021-01-08
  • 2020-04-15
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多