내 응용 프로그램에 내 자신의 간단한 템플릿 시스템을 사용하고 있으며 페이지 당 '동일한'템플릿을 알 수없는 숫자로로드합니다.동적 이름으로 KnockoutJS 관찰 가능 만들기
기본적으로 아약스 호출을 통해 일부 데이터를 가져 와서 uniqueId를 얻습니다. 내 페이지에 템플릿을로드하고 고유 식별자를 사용하여 ID와 데이터 바인딩 = "사용"을 적용합니다.
<div id="content-uniqueId">
<div data-bind="with: uniqueId">
...
</div>
</div>
는 그럼 난 함수를 호출하고 내 '와'결합되도록에서 UniqueID를 사용하여 observableArray을 만들려고하고 있습니다. 같은
뭔가 : 나는 JS 바이올린을 만들었습니다
function(uniqueId) {
var theObservable = uniqueId;
theObservable = ko.observableArray(); // make the observable name equal to uniqueId
// get some data
theObservable(new data);
}
명확한 일을 도와하지만 아약스 데이터를 얻거나 고유 ID를 전달하고 있지 않다 때문에 작동하지 않습니다.
편집 :
Updated JS Fiddle, 아래 Tyrsius '제안 당.
this[uniqueId] = ko.observableArray(new entityApp.dataContext.EntityModel(data));
확실히 한 단계 가까운,하지만 난 오류가 받고 있어요 :
전달 된 인수를 배열, 또는 null 또는 정의되지 않은
하지만 '를해야합니다 관측 배열을 초기화 할 때 새로운 entityApp.dataContext.EntityModel (data) '는 객체 배열을 반환하므로 잘되어야합니다. 바인딩을 보여
다음var ViewModel = function(propName) {
this[propName] = ko.observable("reflection");
};
ko.applyBindings(new ViewModel("dynamic"));
입니다 a fiddle :
감사합니다. 이제 한 걸음 더 가까이 있습니다. 하지만 여전히 오류가 발생합니다 (위의 편집 참조). JS Fiddle을 업데이트하여 내 상황과 더 밀접하게 일치시킵니다. 나는 그것이 작동하지 않는 이유를 모르지만 나는 여전히 어리 석다. http://jsfiddle.net/FHz4k/3/ – dmathisen
문제는'theArray'는 객체가 아니라 배열이라는 것입니다. 'theArray.names' 또는'ko.observableArray ([theArray])'를 원하셨습니까? – Tyrsius
흠. 나는 모른다. 이러한 동적 uniqueId를 사용하지 않을 때 해당 데이터를 사용하여 var obs = ko.observableArray(); obs (새로운 entityApp.dataContext.EntityModel (data)); 나는 모른다. 도움에 감사드립니다. 내 접근 방식을 다시 생각해야 할 수도 있습니다. – dmathisen