2017-12-18 11 views
1

나는 Aurelia 및 Typescript를 사용하고 데이터를 전달한 후 테이블을 생성하는 사용자 지정 요소가 있습니다. 배열 필드를 기반으로 생성 된 테이블의 필드를 표시하고 싶습니다. 값 변환기를 사용하여 일부 표시 방법을 변경하십시오. 바인딩이 전달 된 배열에서 동적으로 생성되고이 가이드에 따라 수행되도록 맞춤 바인딩을 만들려고합니다. https://blog.ashleygrant.com/2017/07/09/getting-my-hands-dirty-with-aurelias-binding-engine/ 작동하지 못할 수도 있지만 정확하게 그가하는 것과 약간의 작은 조각을 바꿔야했다. 나는이 데이터가 무엇인가하기 전에 테이블 셀을 많이 위해 [개체 개체]가 표시됩니다 실행하면 내가Aurelia 사용자 지정 바인딩 오류

<require from="services/custom-binding/dynamic-binding-behaviour"></require> 
<require from="services/data-format"></require><!--ValueConverters--> 
... 
    <tbody> 
     <tr repeat.for="ticket of listData"> 
      <td repeat.for="fieldTest of listDisplay">${ticket & dynamic:'ticket':fieldTest}</td> 
     </tr> 
    </tbody> 

그리고 사용자 정의 바인딩 클래스

@inject(Parser) 
export class DynamicBindingBehavior { 

constructor(private parser: Parser) { 
} 

bind(binding: BindingWithStorage, source: Scope, dataItem: string, args: FieldList) { 

    let arg = dataItem + '.' + args.field; 

    if (args.valueConverter) { 
     arg += ' | ' + args.valueConverter; 
    } 
    let parsedExpression: Expression = this.parser.parse(arg); 
    binding.originalSourceExpression = binding.sourceExpression; 

    binding.sourceExpression = parsedExpression; 
} 

unbind(binding: BindingWithStorage, source: Scope) { 
    console.log('unbind'); 
    if (binding.originalSourceExpression) { 
     binding.sourceExpression = binding.originalSourceExpression; 
    } 
    binding.originalSourceExpression = null; 
    } 
}  

바인딩 정의를 호출

HTML 시작하고 기대했던대로 표시되기 시작합니다. 새로운 페이지로 이동하거나 화면을 새로 고침 할 때마다 정확히 동일한 행과 열이 표시되어 올바르게 표시되기 때문에 aurelia lifecycles과 관련이 있습니다. Example of Incorrect Display

console.log ('unbind')는 콘솔에 표시되지 않으므로 문제의 일부인지 확실하지 않습니다. Aurelia가 어떻게 작동하는지 이해하기에 충분하지 않습니다.

제공된 링크에서 표현식이 리베이스되었지만 작동하지 못하고 실제로 무엇을하려고하는지 이해할 수 없습니다.

+0

당신은 요점을 제공해야합니다. 그리고 질문 : 행동 파일 이름이 맞습니까? – bigopon

+0

파일 이름이 올바른지 확인하십시오. 동작이 표시된 데이터의 일부로 의도 된대로 작동합니다. 코드 작성시 명백한 실수 였으면 좋겠다. 주말에 요지를 만들려고 노력할 것입니다. – Lewis

답변

0

내가 전에 만든 프로토 타입은 다음과 같습니다. 절대로 편집 작업을 수행 할 필요가 없습니다. 가상화를 그룹화하고 사용하여 많은 양의 데이터를 처리합니다.

https://gist.run?id=9782317010240c90fc30e179eeb41064

https://gist.github.com/jdanyow/9782317010240c90fc30e179eeb41064

+0

건배, 전 주말에이 작업을 시도해 보겠습니다. 잠깐 살펴 보니 SetAttributeBindingBehavior를 어디에서 사용할 수 있는지 알 수 없었습니다. something.bind = "item & setAttribute"같은 것이 없으면 어떻게 호출 될까요? – Lewis