Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聚合物模板是否有邮票活动?_Javascript_Html_Polymer - Fatal编程技术网

Javascript 聚合物模板是否有邮票活动?

Javascript 聚合物模板是否有邮票活动?,javascript,html,polymer,Javascript,Html,Polymer,我试图在聚合物模板中的输入元素每次标记其内容时将其聚焦。问题是,在加载模板之前,我无法选择输入元素。目前,我只是在加载模板100毫秒后使用setTimeout来聚焦输入,但我想知道是否有更优雅的解决方案。此外,“自动聚焦”属性也不起作用,因为模板可能会多次取消标记和重新标记。现在,我的代码看起来像这样,它位于聚合元素定义中: 聚合物{ // ... showInput:false, makeInputVisible:函数{ this.showInput=true; var container=这

我试图在聚合物模板中的输入元素每次标记其内容时将其聚焦。问题是,在加载模板之前,我无法选择输入元素。目前,我只是在加载模板100毫秒后使用setTimeout来聚焦输入,但我想知道是否有更优雅的解决方案。此外,“自动聚焦”属性也不起作用,因为模板可能会多次取消标记和重新标记。现在,我的代码看起来像这样,它位于聚合元素定义中:

聚合物{ // ... showInput:false, makeInputVisible:函数{ this.showInput=true; var container=这个$.container; setTimeoutfunction{ container.querySelectorinput.focus; }, 100; }, }; 但我更喜欢这样的东西:

聚合物{ // ... showInput:false, makeInputVisible:函数{ this.showInput=true; }, 焦点输入:函数{ 此.$.container.querySelectorinput.focus; }, };
欢迎提出任何想法。

有多种方法可以做到这一点,但最简单的方法是观察价值观,例如:

// you already have an Id assigned to the input, so you can use that reference.
.. 
 showInputChanged: function() {
  this.$.input.focus();
 }
..
如果需要跨组件通信,还可以定义自己的事件处理程序:

..
 ready: function() {
  this.addEventListener("on-stamp", function(e) {
   if(e.detail.value != undefined) this.$.input.value = e.detail.value; 
   this.$.input.focus();  
  });
 }
..
然后,您可以在任何地方使用激发事件,甚至可以设置值,例如

   setValue: function(s) {
    this.fire("on-stamp", {value: s});
   },

对于Polymer 1.0,模板在标记时会触发“dom更改”事件。但是,由于使用dom if模板需要操作dom树,因此会带来巨大的性能成本。这样做会更好:

观察员:[ “\u showInputChangedshowInput”, ], _showInputChanged:函数showInput{ 如果显示输入{ 这是$.input.focus; } },
您是否试图在更新输入值后对其进行聚焦?我不太明白你对stamp的意思。聚合物模板在默认情况下会使其内容变为惰性。这意味着它们不存在于DOM中,并且不会执行任何脚本。这反过来意味着,在模板绑定或将它们标记到DOM中之前,无法选择它们。看见我希望在模板绑定时集中输入,但在模板刚刚将其放入DOM之后,我才能选择输入。这就是为什么我一直在使用setTimeout,但我更喜欢某种类型的“on bind”事件。不幸的是,我无法使用选择输入,因为它在模板中。此外,我还尝试观察该值,但showInputChanged函数在绑定模板之前被调用,因此我无法选择输入。作为补充说明,您可以使用本例中的。$$输入通过自动节点查找选择动态生成的内容。你只需要使ID唯一,然后知道你想从外部选择哪一个。