2017-03-09 104 views
1

我有使用JSON對象聚合物雙向綁定的問題聚合物數據綁定JSON對象

的輸入用簡單變種綁定,第2方式的結合作品\ O/

與物體,{ {message.from}}例如: - >所述輸入修改的變量{{message.from}},沒問題

BUT:

如果在一個函數I修改VAR message.from的輸入不包含此更改

輸入不刷新

感謝

<template> 

    <style is="custom-style" include="iron-flex iron-flex-alignment iron-positioning"> 

    </style> 

    <div class="vertical layout center-justified"> 

     <div> 
      <div>{{session.user.name}}</div> 
      <div>{{session.user.id}}</div> 
     </div> 


     <div class="horizontal layout center-justified"> 
      <paper-button on-click="envoi" style="margin-top:20px;"> 
       <iron-icon icon="send" item-icon></iron-icon> 
       VALIDER</paper-button> 
     </div> 
    </div> 
</template> 


<script> 
addEventListener('WebComponentsReady', function() { 
     Polymer({ 
      is: "creation-dossier", 
      properties: { 
       session: { 
        type: Object, 
        value: function() { 
         return { 
          user: { 
           name: "rob", 
           id: 1 
          } 
         }; 
        } 
       } 
      }, 
      envoi: function(){ 
       console.log('this.session.user.name '+ this.session.user.name); 
       console.log('this.session.user.id '+ this.session.user.id); 
       this.session.user.name = "coucou2"; 
       this.session.user.id = 0; 
       console.log('this.session.user.name '+ this.session.user.name); 
       console.log('this.session.user.id '+ this.session.user.id); 
      } 
     }); 
}); 
</script> 
+0

請詳細說明。什麼是預期的和實際的行爲? – tony19

+0

我修改了片段 事實上,我想知道爲什麼var內容不在視圖中刷新。 如果我使用單個變種,沒有問題。 但與對象,不一樣的成功。 感謝您的意見 –

+0

是否要將envoi函數中所做的更改反映在UI? – aries12

回答

0

這是因爲聚合物不遵守子屬性更改。 如果你有這樣的

session{value:10} 

一個屬性,如果你這樣做this.session = 20;它會通過雙向綁定自動反映到UI。

您可以使用notifyPath這樣的子屬性更改。

`envoi: function(){ 
    this.trail = 20; 
    console.log('this.session.user.name '+ this.session.user.name); 
    console.log('this.session.user.id '+ this.session.user.id); 
    this.session.user.name = "coucou2"; 
    this.session.user.id = 0; 
    console.log('this.session.user.name '+ this.session.user.name); 
    console.log('this.session.user.id '+ this.session.user.id); 
    this.notifyPath('session.user.name', this.session.user.name); 
    this.notifyPath('session.user.id', this.session.user.id); 
},` 

或另一種方式是利用dirty-checking這樣

`envoi: function(){ 
    this.trail = 20; 
    console.log('this.session.user.name '+ this.session.user.name); 
    console.log('this.session.user.id '+ this.session.user.id); 
    this.session.user.name = "coucou2"; 
    this.session.user.id = 0; 
    console.log('this.session.user.name '+ this.session.user.name); 
    console.log('this.session.user.id '+ this.session.user.id); 
    var temp = this.session; 
    this.session = []; 
    this.session = temp; 
},` 

第三種方式是利用的set這樣 this.set('session.user.name','some name');