여기서는 속성 바인딩 (attr
)을 사용해야하는 시나리오가 있지만 적용 할 실제 값은 콜백을 통해 반환되므로 녹아웃을 얻는 방법은 콜백 인식이 될 수 있습니까?비동기 함수로 녹아웃 바인딩 대상
대답은 '아니오'라고 가정하고 비동기 녹아웃 플러그인 중 하나를 사용해야하지만 그 중 일부는 더티 플래그 등 설정이 필요하기 때문에 그 모델을 복잡하게 만들지는 않을 것입니다. 그래서 여기
코드 예제 : 위의 예에서
function SomeViewModel()
{
var someStorageMechanism = new StorageMechanism();
this.GetUserPicture = function(userId) {
someStorageMechanism.GetUserData(userId, function(userData) {
// should really be using a callback argument then do callback(userData.picture); but knockout has no notion of this
});
};
}
<img data-bind="attr: { src: GetUserPicture($data.userId) }"/>
GetUserPicture
이상적으로 이미지 데이터 문자열 또는 URL, 그러나 데이터가 기본 개체에서이 경우에 검색 할 필요를 반환해야하는 비동기 적으로 작동하므로이 문제를 해결할 수있는 간단한 방법이 있습니까?
왜 viewmodel에서 관찰 가능 속성 인'picture'를 만들지 않습니까? 그런 다음 바인딩 ''에서 해당 속성을 사용할 수 있으며 콜백에서'this.picture (userData.picture) '로 값을 설정하면 뷰 모델 내부에서'GetUserPicture (userId)'를 호출 할 수 있습니다. – nemesv
약속을 들었습니까? https://github.com/knockout/knockout/wiki/Use-an-observable-as-a-jQuery-promise 비동기 데이터를 처리하는 한 가지 방법입니다. –
@nemesv이 시나리오는 foreach (템플릿이 ko 외부 템플릿 로더를 사용하는 비동기식) 인 템플리트입니다.이 중 하나의 섹션에는 속성을 설정해야하므로 각 항목에는 자체 그림이 있지만 그림은 저장됩니다 localStorage 영역 내에서. 그래서이 데이터를 각각의 항목에서 관찰 할 수있게하려면 foreach 내에있는 각 항목을 미리 처리하고 각각의 그림을 미리 채우거나 afterRender를 기다린 다음 수행해야합니다. ,하지만 그 큰 그림의 아주 작은 부분에 대한 여러 장소에서 훨씬 더 많은 논리가 – Grofit