【问题标题】:Polymer change notification and two-way binding syntax聚合物更改通知和双向绑定语法
【发布时间】:2015-06-09 04:44:30
【问题描述】:

我正在尝试弄清楚如何在聚合物中使用 here 中描述的 2-way 通知

虽然这解释了有一些机制可以通知子元素上的对象是否已更改:

当属性的子属性配置为 type: Object 改变,一个元素触发一个非冒泡改变的 DOM 事件 detail.path 值指示对象上的路径 改变了。

但它没有提供任何线索(我可以整理出来)根据这种变化编写某些行为的语法看起来如何。

例如,如果我有父母:

<dom-module id="parent-element">
<template>
<child-element obj="{{myObj}}"></child-element>
</template>
<script>
Polymer({
    is: "parent-element",
    myObj: {
        type: Object
    },
    parentClick: function(){
        this.myName = "Parent";
    },
    myObjChanged: function(){ //How to handle this event?
        console.log("I have no idea what I'm doing")
    }
    });
</script>

我有一个子元素:

<dom-module id="child-element">
    <template>
     <span on-click="childClick">Click me</span>
</template>

<script>
    Polymer({
        is: 'child-element',
        properties: {
            obj: {
                type: Object,
                notify: true
            }
        },
        ready: function(){
            this.obj = {foo: "bar"}
        },
        childClick: function(){
            this.obj.foo = "baz"
        }
    });
</script>

当点击孩子时,我希望某个事件会触发并被父级拾取,但我不知道如何在父级上为该事件编写脚本。我错过了什么?

【问题讨论】:

    标签: javascript polymer


    【解决方案1】:

    我最近遇到了这个问题,我通过触发我自己的事件来解决这个问题。您可以查看here 的文档(请注意,此文档适用于 0.5,但我已使用 1.0 版完成此操作)。在您的子元素中,您可以更改 childClick 函数以触发自定义事件,如下所示:

    childClick: function(){
        this.obj.foo = "baz"
        this.fire("child-element-click"); // this can be anything you want...
    }
    

    然后在你的父元素中添加一个监听器到child-element:

        <dom-module id="parent-element">
        <template>
            <child-element obj="{{myObj}}" on-child-element-click="myObjChanged"></child-element>
        </template>
    <script>
        Polymer({
            is: "parent-element",
            myObj: {
                type: Object
            },
            parentClick: function () {
                this.myName = "Parent";
            },
            myObjChanged: function () {
                console.log("I have no idea what I'm doing")
            }
        });
    </script>
    

    【讨论】:

    • 谢谢!在 1.0 中工作时,我因尝试 0.5 文档而被烧毁了几次。这就像一个魅力
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2016-03-18
    • 2015-09-20
    相关资源
    最近更新 更多