2014-07-01 31 views
1

我正嘗試使用<template is="auto-binding">在我的模板中使用Polymer Expressions。聚合物模板自動綁定中斷模型屬性?

至於其他<template bind>我激活一個模板,通過連接模型屬性,如在Polymer Docs

我的代碼描述如下所示:

<template id="root" is="auto-binding"> 
    List 
    <ul> 
    <template repeat="{{ item in list }}"> 
     <li>{{item.desc}}</li> 
    </template> 
    </ul> 
</template> 
<script type="text/javascript"> 
    var template = document.getElementById("root"); 

    template.model = { 
     "list": 
      [{ 
      "desc": "first" 
      }, { 
      "desc": "second" 
      }] 
     }; 
</script> 

JSBin here,你可以看到here jsbin.com/fibuc/1/quiet它不行。 (Chrome Canary,Chrome Stable,IE,Firefox)。

看來,如果我給你list直接template它的工作原理:http://jsbin.com/fibuc/3/quiet

template.list = 
    [{ 
    "desc": "first" 
    }, { 
    "desc": "second" 
    }, { 
    "desc": "third" 
    }]; 

什麼是很奇怪的,但它仍然與.model作品,如果我遲疑,附加了一下:http://jsbin.com/fibuc/2/quiet

setTimeout(function() { 
    template.model = { 
    "list": 
     [{ 
     "desc": "first" 
     }, { 
     "desc": "second" 
     }, { 
     "desc": "third" 
     }] 
    }; 
    },1000); 

這是一個錯誤,還是我做錯了什麼?


編輯:如果可能的話,我想保持劇本不知道這樣的模板使用:<template bind><template is="auto-binding">。 在我的情況下,腳本代碼位於自定義元素puppet-js之內,它只提供從服務器到給定節點的數據,外部應用程序負責創建模板。

回答

4

文檔的用於<template is="auto-binding">最好集是在http://www.polymer-project.org/docs/polymer/databinding-advanced.html#autobinding

那裏的例子示出了對<template>直接設置約束變量,而不是通過model去。如果您使用Polymer元素中的模板,那麼您會這樣做,我相信這個想法是維持該使用模式,而不是像使用非auto-binding<template>那樣與model交互。這就是說,如果你確實想要設置模型,在template-bound事件被觸發後你的工作似乎是這樣做的 - 你的setTimeout()已經接近這個數字,但是聽到這個事件顯然更清晰。下面是一個例子(jsbin):

var template = document.getElementById("root"); 
    template.addEventListener('template-bound', function() { 
    template.model = { 
     "list": [ 
     {"desc": "first"}, 
     {"desc": "second"}, 
     {"desc": "third"} 
     ] 
    }; 
    }); 

編輯:望着relevant source code,看來最初忽略了<template>model性質是故意的,它給一些有識之士來後template-bound作品爲什麼設置model如果你真的想這樣做。

+0

問題是'template-bound'沒有爲常規的''觸發。我想保留代碼在腳本(實際上是在自定義元素[puppet-js](https://github.com/PuppetJs/Puppet-Js))不知道方式外部應用程序使用的模板 – tomalec

+0

我看到兩個選項:或者嘗試通過類似'template.getAttribute('is')=='auto-binding''的方式來檢測代碼被使用的模板的風格,或者查看是否可以說服Polymer維護者更改行爲並做一些類似'this.model = this。模型||用於自動綁定模板的'createdCallback'中。你可以[提交bug](https://github.com/Polymer/polymer-dev/issues),看看他們有什麼要說的。 –