2014-05-12 19 views
10

In polymer.dart, se si desidera esporre una variabile definita nel controller sul lato vista, si definisce la variabile con @observable e si utilizza il doppio baffo per incorporare la variabile. Tuttavia, alcuni documenti e esercitazioni utilizzano lo @published per raggiungere lo stesso scopo. Anche i documenti ufficiali utilizzano entrambi, quindi non credo che lo standard @published sia obsoleto e deprecato per la definizione delle variabili.Qual è la differenza tra @observable e @published in polymer.dart?

Quindi c'è qualche differenza tra i due? E quale dovrei usare nel mio codice?

risposta

16

@published - è vincolante (modello per ricercare altri e vista modello)

Caso d'uso a due vie per @published è, se la vostra proprietà modello è attributo anche in un tag.

Esempio: per un elemento tabella si desidera fornire dati da un'origine esterna, in modo da definire i dati degli attributi, in questo caso la proprietà dei dati deve essere @ pubblicata.

<polymer-element name = "table-element" attributes ="structure data"> 
    <template> 
     <table class="ui table segment" id="table_element"> 
      <tr> 
       <th template repeat="{{col in cols}}"> 
        {{col}} 
       </th> 
      </tr> 
      <tr template repeat="{{row in data}}"> 
       etc...... 
    </template> 
<script type="application/dart" src="table_element.dart"></script> 
</polymer-element> 


@CustomTag("table-element") 
class Table extends PolymerElement { 

@published List<Map<String,String>> structure; // table struture column name and value factory 
@published List<dynamic> data; // table data 

@observable - è vincolante un modo - (modello per ricercare altri)

Se si desidera solo per passare i dati da modello per ricercare altri uso @observable

Esempio: Per utilizzare sopra tavolo elemento che devo fornire i dati, in questo caso i dati e la struttura saranno osservabili nel mio codice dardo test da tavolo.

<polymer-element name = "table-test"> 
<template> 
    <search-box data ="{{data}}" ></search-box> 
    <table-element structure ="{{structure}}" data = "{{data}}" ></table-element> 
</template> 
<script type="application/dart" src="table_test.dart"></script> 
</polymer-element> 

codice dardo

CustomTag("table-test") 
class Test extends PolymerElement { 

    @observable List<People> data = toObservable([new People("chandra","<a href=\"http://google.com\" target=\"_blank\"> kode</a>"), new People("ravi","kiran"),new People("justin","mat")]); 
    @observable List<Map<String,String>> structure = [{ "columnName" : "First Name", "fieldName" : "fname"}, 
                {"columnName" : "Last Name", "fieldName" : "lname","cellFactory" :"html"}]; 
    Test.created():super.created(); 

esempi sono tratti da My Repo

+0

Grazie. Allora quando è il caso di usare @published? Anche se utilizzo solo una connessione unidirezionale, posso ottenerla con @observable, giusto? È una cattiva convenzione o perde qualche prestazione? – Blaszard

+0

risposta aggiornata, per favore fatemi sapere se qualcosa non è chiaro. – invariant

+0

Grazie per il chiarissimo chiarimento. E ho appena scoperto di aver frainteso '@ published' e' @ observable' nel mio primo commento qui ... Scusa. – Blaszard

Problemi correlati