0

는 (하지만 기본 defineProperty 전화를 가리는 이외의 타이프 문제와 관련이 있다고 생각하지 않는다)이 타이프 라이터 클래스를 고려 : 내가 매핑 플러그인을 사용하고정의 된 속성을 업데이트하기 위해 녹아웃을 얻으려면 어떻게해야합니까?

class Model 
{ 
    public TeamId: number; 

    constructor() 
    { 
     var self = this; 

     ko.track(this); 

     ko.getObservable(this, "TeamId").subscribe(function (newValue) 
     { 
      var o = ko.getObservable(self, "link"); 
      o.valueHasMutated(); 
     }); 
    } 

    get link(): string 
    { 
     return `/blah/blah/team/${this.TeamId}`; 
    } 
} 

참고.

link 속성은 현재 TeamId 속성을 사용하여 해당 팀에 적합한 링크를 만듭니다. 내 문제는 : TeamId 속성이 변경되면 link 속성도 변경된다는 것을 어떻게 알 수 있습니까? subscribe 콜백이 수행 할 것이라고 생각했지만 getObservable은 null을 반환합니다. 이것은 defineProperty으로 정의 된 속성과 작동하지 않기 때문입니다. 하지만이 문법을 사용하고 싶기 때문에 붙잡혀 있지만 작동하지는 않습니다.

답변

0

나는 당신이 계산 된 링크를 만들어야한다고 말할 것이다.

ko.defineProperty(this, 'link', function() { 
    return `/blah/blah/team/${this.TeamId}`; 
}); 

이렇게하면 TeamId에 대한 종속성을 만들 때 자동으로 업데이트해야합니다.

0

속성 getters/setters를 사용하려고 할 때 private backing observable 필드와 함께 사용합니다. 그렇게하면 외부에 관찰 대상이 숨겨 지지만 내부 관찰을 통해 관찰 할 수 있습니다. 귀하의 경우에는

private _property = ko.observable('myValue'); 
get property(): string { 
    return this._property(); 
} 
set property(value:string) { 
    this._property(value); 
} 

당신과 그 결합 할 수있는 자동 업데이트 값을 처리하기 위해 계산, 나는 그렇게는 모양으로 계산, 당신은 ko.getObservable()ko.track() 호출을 설명 ES5 플러그인을 사용하고 있는지 지금 볼 정규 함수. 나는 쉽게 그 모든 테스트, 그러나 이것은 당신이 원하는 않는 경우 볼 수 없습니다 : 내 현재 해결 방법을 바탕으로

class Model 
{ 
    public TeamId: number; 

    constructor() 
    { 
     var self = this;  
     ko.track(this); 
    } 

    get link(): string 
    { 
     return this.getLink(); 
    } 

    private getLink(){ 
     return `/blah/blah/team/${this.TeamId}`; 
    } 
} 
+0

, 나는이 작동합니다 생각하지만, 그것은 같은 백업 기능을해야하는 종류의 미봉책이다 모든 재산에 대해. 일종의 * 속성 * 데 목적의 많은 패배. –

+0

거기에 인수가 없습니다. 다른 ES5 관련 질문을 열어 더 나은 방법이 있는지 알아볼 수도 있습니다. –