javascript - Polymer.js 双向绑定(bind)到 textarea 值

标签 javascript polymer polymer-1.0

在 0.5 版本中很简单:

<polymer-element name="textarea-tpl" attributes="value placeholder">
    <template>
        <link rel="stylesheet" type="text/css" href="css/index.css">

        <textarea id="textarea" value="{{value}}" placeholder="{{placeholder}}"></textarea>
        <textarea id="hidden_textarea"></textarea>
    </template>
    <script>
        Polymer({
            ready: function() {
                var text = this.$.textarea;
                var hidden_text = this.$.hidden_textarea;

                text.onkeyup = function() {
                    hidden_text.value = text.value + "\n";
                    var height = hidden_text.scrollHeight;
                    text.style.height = height+'px';
                };
            }
        });
    </script>
</polymer-element>

在 1.0 版中,此绑定(bind)不起作用。只写作品而且很奇怪,只写一次。 v1.0 代码:

<dom-module id="chat-textarea">
    <template>
        <textarea id="textarea" value="{{value}}" placeholder="{{placeholder}}"></textarea>
        <textarea id="hidden_textarea"></textarea>
    </template>

    <script>
        Polymer({
            is: "chat-textarea",
            properties: {
                value: String,
                placeholder: String
            },

            set text(val) {
                this.$.textarea.value = val;
            },
            get text() {
                return this.$.textarea.value;
            },

            ready: function() {
                var text = this.$.textarea;
                var hidden_text = this.$.hidden_textarea;

                text.onkeyup = function() {
                    hidden_text.value = text.value + "\n";
                    var height = hidden_text.scrollHeight;
                    text.style.height = height+'px';
                };
            }
        });
    </script>
</dom-module>

现在我使用 set\get 文本,但它不是属性,只能从 JS 获得。

在 iron-autogrow-textarea 中写道:因为 textarea 的值属性是不可观察的,所以你应该使用这个元素的绑定(bind)值来代替命令更新。 但为什么在 0.5 版本中 textarea 的值是可见的?

最佳答案

要绑定(bind)到 Polymer 1.0 中的输入值,请在要绑定(bind)到的变量后添加::input。

例子:

  <textarea value="{{taValue::input}}"></textarea>

这是 a working example on plnkr

像 iron-input 这样的元素使用 bind-input 属性来自动绑定(bind)变量。

更多信息在 two-way binding 的文档中

关于javascript - Polymer.js 双向绑定(bind)到 textarea 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31595316/

相关文章:

javascript - Chartjs 和 Polymer 1.7.0

javascript - 通过更改底层数组动态更新 dom-repeat 模板

javascript - 我该如何修复 --> 文件是 CommonJS 模块;它可以转换为 ES6 模块

javascript - 切换事件类以更改 Font Awesome 图标

css - 如何使用媒体查询更改主机的CSS :( polymer )

css - 从静态样式属性中为 `::slotted()` 元素设置样式

javascript - 为什么我的 url 在使用 angular 时包含 "!"?

JavaScript - 搜索数组中包含某些文本的元素

javascript - 如何维护 Web 组件之间的依赖关系而不让其原型(prototype)进入全局命名空间?

javascript - dom-if 没有在 dom-repeat 中更新