2013-03-28 5 views
2

내 응용 프로그램에 내 자신의 간단한 템플릿 시스템을 사용하고 있으며 페이지 당 '동일한'템플릿을 알 수없는 숫자로로드합니다.동적 이름으로 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를 전달하고 있지 않다 때문에 작동하지 않습니다.

JS Fiddle here

편집 :

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 :

답변

2

자바 스크립트는 동적 할당과 객체 인덱서 간단한 반사한다.

+0

감사합니다. 이제 한 걸음 더 가까이 있습니다. 하지만 여전히 오류가 발생합니다 (위의 편집 참조). JS Fiddle을 업데이트하여 내 상황과 더 밀접하게 일치시킵니다. 나는 그것이 작동하지 않는 이유를 모르지만 나는 여전히 어리 석다. http://jsfiddle.net/FHz4k/3/ – dmathisen

+0

문제는'theArray'는 객체가 아니라 배열이라는 것입니다. 'theArray.names' 또는'ko.observableArray ([theArray])'를 원하셨습니까? – Tyrsius

+0

흠. 나는 모른다. 이러한 동적 uniqueId를 사용하지 않을 때 해당 데이터를 사용하여 var obs = ko.observableArray(); obs (새로운 entityApp.dataContext.EntityModel (data)); 나는 모른다. 도움에 감사드립니다. 내 접근 방식을 다시 생각해야 할 수도 있습니다. – dmathisen

관련 문제