ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • polymer data binding - Observable changes
    dev/etc 2016. 12. 15. 14:22

    polymer 를 사용하여 data binding 을 하면 쉽게 data 를 UI 로 변경할 수 있다.


    이후 binding 된 데이터를 변경하거나 새로운 데이터를 바인딩하여 UI 변경을 하려 할때 제대로 동작을 하지 않아 property 를 이용한 꼼수등을 쓰곤했다.


    polymer 에서는 observable changes 란 것이 있어 polymer 가 인식 할 수 있는 방식으로 data 변경을 해주는 방법이 있다.


    <template is="dom-repeat" items="{{employees}}">

            <div># <span>{{index}}</span></div>

            <div>First name: <span>{{item.first}}</span></div>

            <div>Last name: <span>{{item.last}}</span></div>

    </template>

    위와 같이 바인딩된 상태에서 새로운 data 를 할당하거나 기존 데이터를 변경할 때,


    // unobservable subproperty change

    this.address.street = 'Elm Street';


    // unobservable change using native Array.push

    this.users.push({ name: 'Maturin});

    와 같은 방식을 사용하게 되면 polymer 의 data binding 이 제대로 동작하지 않는다.


    대신,


    // mutate an object observably

    this.set('address.street', 'Half Moon Street');


    // mutate an array observably

    this.push('users', { name: 'Maturin'});

    와 같이 하게되면 정상적으로 binding 된 데이터 변경을 UI 에 반영하게 된다.


    그리고 외부 라이브러리를 사용하거나 하여 위와 같은 뭄법을 쓸수 없을 경우에는 notifyPath 나 notifySplices 를 사용하여 명시적으로 변경된 경로를 알려줌으로써 강제로 변경 통지를 할 수 있다.


    // Notify Polymer that the value has changed

    this.notifyPath('address.street');


    출처

    https://www.polymer-project.org/1.0/docs/devguide/data-system#observable-changes


Designed by Tistory.