2011-08-02 2 views
0

임에 접근하지만 약간의 문제가있을 때 : 이것은 내 스팬정의되지 않은의 contentEditable 범위와 변경 사항을 저장 이상한 방법을 시도하는 뷰 모델 객체

:

<span data-bind="text: Content, event: { blur: viewModel.contentEdited}" contenteditable></span> 

을하고 뷰 모델입니다 같은 :

function note(id, date, content, category, color, background) { 
    this.ID = id; 
    this.Date = date; 
    this.Content = content; 
    this.Category = category; 
    this.Color = color; 
    this.Background = background; 
} 
: 템플릿은 메모에 구속력

var viewModel = { 
    notes: ko.observableArray([]), 
    newNoteContent: ko.observable(), 
    actualId: 0 
}; 

viewModel.contentEdited = function() { 
    alert(this.notes); 
} 

경고는 "정의되지 않음"입니다. 메신저가 viewModel의 다른 인스턴스를 만들고 거기에 노트가 비어 있기 때문입니까? 템플리트의 컨텍스트는 note이며 viewModel 외부에 있습니다.

감사합니다.

답변

1

녹아웃의 경우 메서드를 호출 할 때 this의 값이 무엇인지주의해야합니다. 항목 (노트) 안에 있으면 this이 배열 항목이됩니다.

가장 쉬운 방법은 this의 값을 명시하는 것입니다. 녹아웃은 bind() 함수의 구현을 포함합니다.이 함수를 사용하면 함수에 대해 this의 값을 효과적으로 설정할 수 있습니다.

viewModel.contentEdited = function() { 
    alert(this.notes); 
}.bind(viewModel); 
+0

감사합니다 : 같은

그래서, 함수가 보일 것이다! 따라서 viewModel에 바인딩 할 때 'this'의 '컨텍스트'를 변경합니다. 하지만 여전히 메모 자체에 대한 액세스를 원한다면 매개 변수 나 다른 것을 통해 보낼 수 있다고 생각합니다. –

+0

예, 일반적으로'this'가 당신의 뷰 모델이되기를 원할 것입니다. 그리고 당신은 행동을 위해 아이템을 전달하기를 원할 것입니다. –