2014-02-26 1 views
3

폴리머를 사용하는 경우 값이 아닌 방법에 바인딩 할 수 있습니까? 예 :폴리머를 사용하는 방법에 바인딩

<div>{{someMethod()}}</div> 

또는 소스 및 문서에서 판단

<div>{{someMethod}}</div> 

는 그렇지 않다. 그냥 확인하고 싶었어.

답변

3

직접적으로는 아니지만, 원하는 것을 실제로 성취 할 수있는 몇 가지 방법이 있습니다. 나는 당신이 데이터를 변환하고 싶어한다고 가정하고 ...?

  1. ES5 게터

    속임수의 비트와 같은 속성을 정의합니다,하지만 당신은 게터와 같은 속성을 정의하고 반환 된 값 주위에 사용자 지정 논리를 포장 할 수 있습니다.

    <div>{{likes}}</div> 
    
    Polymer('my-tag', { 
        firstName: 'John', 
        get likes() { 
        return this.firstName + ' ' + lastName + ' likes bread'; 
        } 
    }); 
    

    데모 : http://jsbin.com/nuyuqote/3/edit

    참고 : 사용 신중이 선택 사항. Getter에 바인딩하는 것은 지원되는 경우 Polymer가 사용하는 Object.observe()에서 작동하지 않습니다. 아래 Scott's comment을 참조하십시오.

  2. 사용자 정의 필터

    아직 문서화되지 :(

    <div>{{'thingy' | upperCaseFilter}}</div> 
    
    Polymer('my-tag', { 
        upperCaseFilter: function(value) { 
        return value.toUpperCase(); 
        } 
    }); 
    

    데모 : http://jsbin.com/nuyuqote/1/edit

  3. <prop>Changed

    Scott's comment B 참조 엘로 우.

그런데 우리가 Polymer에 {{someMethod()}}과 같은 것이없는 이유 중 하나는 JavaScript를 실행한다는 것입니다. onclick="someMethod()"처럼 XSS 공격과 같은 일을하기 쉽기 때문에 일반적으로 안티 패턴으로 간주됩니다.

+0

게터에 바인딩하는 것은 좋지 않습니다. 'Object.observe'는 여분의 코드없이 게터를 관찰 할 수 없으므로 원래 관찰로 플랫폼으로 전환 할 때 문제가 발생합니다. 폴리머의 관측 및 바인딩 시스템은 일반적으로 getter 또는 setter를 사용하지 않고 원하는 것을 할 수 있습니다. 예를 들어, getter 대신에 'firstnameChanged' (http://jsbin.com/nuyuqote/5/edit)를 사용할 수 있습니다. 'likes' 속성을 존재시키지 않으려면 필터 솔루션이 최선의 선택입니다. –

+0

이 질문은 잘못된 SO 계정으로 게시했습니다. 어쨌든, 정보 주셔서 감사합니다. 바인딩 된 값으로 텍스트가 아닌 HTML을 삽입하려는 경우 사용자 지정 필터를 선택하는 것이 가장 좋습니다. 이것이 사실이 아닌 것처럼 보이며 HTML 바인딩에 원시 바인딩이 작동하지 않을 수 있습니다. – bitpshr

+0

HTML을 삽입하려면, 그림자 루트의 노드를 참조하고'Changed' 핸들러에'.innerHTML'을 설정하면됩니다. '

'과'this. $. mycontainer.innerHTML = '굵은 글씨! ';' – ebidel

관련 문제