2012-03-09 3 views
2

knocoutjs 바인딩에서 일부 HTML 및 요소를 생성하고 싶습니다. 이 HTML은 이미 가지고있는 템플릿과 동일합니다. 나는 명백한 일을 시도하고 다른 바인딩에서 템플릿 바인딩을 호출했지만 아래와 같이 오류가 발생합니다.knockoutjs 바인딩에서 템플릿 호출

내 전화

// doc is a parameter to the method 
var $assessments = $('div'); 
var docfcn = function() { return doc; } 
var defaultAllBindingContexts = function() { return {}; } 
ko.bindingHandlers.template.update($assessments, function() {return {name: 'assessmentControls', data: docfcn};}, defaultAllBindingContexts, doc); 

오류 :

내가 제대로 템플릿을 실행하는 데 어떻게해야합니까 무엇
Uncaught TypeError: Cannot call method 'createChildContext' of undefined 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2864 
getDocDescriptionbindings.js:627 
ko.bindingHandlers.rankeddoc.updatebindings.js:667 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
ko.renderTemplateForEach.activateBindingsCallbackknockout-2.0.0.debug.js:2794 
ko.utils.setDomNodeChildrenFromArrayMappingknockout-2.0.0.debug.js:3100 
ko.renderTemplateForEach.ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:2809 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateForEachknockout-2.0.0.debug.js:2799 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2859 
ko.bindingHandlers.foreach.updateknockout-2.0.0.debug.js:2452 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
executeTemplateknockout-2.0.0.debug.js:2739 
ko.renderTemplate.ko.dependentObservable.disposeWhenknockout-2.0.0.debug.js:2769 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateknockout-2.0.0.debug.js:2759 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2866 
ko.bindingHandlers.with.updateknockout-2.0.0.debug.js:2390 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
executeTemplateknockout-2.0.0.debug.js:2739 
ko.renderTemplate.ko.dependentObservable.disposeWhenknockout-2.0.0.debug.js:2769 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateknockout-2.0.0.debug.js:2759 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2866 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
ko.renderTemplateForEach.activateBindingsCallbackknockout-2.0.0.debug.js:2794 
ko.utils.setDomNodeChildrenFromArrayMappingknockout-2.0.0.debug.js:3100 
ko.renderTemplateForEach.ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:2809 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateForEachknockout-2.0.0.debug.js:2799 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2859 
ko.bindingHandlers.foreach.updateknockout-2.0.0.debug.js:2452 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
executeTemplateknockout-2.0.0.debug.js:2739 
ko.renderTemplate.ko.dependentObservable.disposeWhenknockout-2.0.0.debug.js:2769 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateknockout-2.0.0.debug.js:2759 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2866 
ko.bindingHandlers.with.updateknockout-2.0.0.debug.js:2390 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
applyBindingsToDescendantsInternalknockout-2.0.0.debug.js:1755 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1776 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
executeTemplateknockout-2.0.0.debug.js:2739 
ko.renderTemplate.ko.dependentObservable.disposeWhenknockout-2.0.0.debug.js:2769 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateknockout-2.0.0.debug.js:2759 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2866 
ko.bindingHandlers.with.updateknockout-2.0.0.debug.js:2390 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
executeTemplateknockout-2.0.0.debug.js:2739 
ko.renderTemplate.ko.dependentObservable.disposeWhenknockout-2.0.0.debug.js:2769 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateknockout-2.0.0.debug.js:2759 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2866 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
applyBindingsToNodeInternalknockout-2.0.0.debug.js:1855 
applyBindingsToNodeAndDescendantsInternalknockout-2.0.0.debug.js:1773 
ko.applyBindingsknockout-2.0.0.debug.js:1887 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2700 
invokeForEachNodeOrCommentInParentknockout-2.0.0.debug.js:2682 
ko.activateBindingsOnTemplateRenderedNodesknockout-2.0.0.debug.js:2699 
executeTemplateknockout-2.0.0.debug.js:2739 
ko.renderTemplate.ko.dependentObservable.disposeWhenknockout-2.0.0.debug.js:2769 
evaluateInitialknockout-deferred-updates.js:241 
newComputedknockout-deferred-updates.js:281 
ko.renderTemplateknockout-2.0.0.debug.js:2759 
ko.bindingHandlers.template.updateknockout-2.0.0.debug.js:2866 
ko.bindingHandlers.with.updateknockout-2.0.0.debug.js:2390 
ko.dependentObservable.disposeWhenNodeIsRemovedknockout-2.0.0.debug.js:1848 
evaluateImmediateknockout-deferred-updates.js:225 
evaluatePossiblyAsyncknockout-deferred-updates.js:200 
ko.subscribable.fn.notifySubscribersknockout-2.0.0.debug.js:809 
ko.utils.arrayForEachknockout-2.0.0.debug.js:60 
ko.subscribable.fn.notifySubscribersknockout-2.0.0.debug.js:805 
ko.observable.observable.valueHasMutatedknockout-2.0.0.debug.js:882 
observableknockout-2.0.0.debug.js:871 
selectViewquerium.js:694 
Array.eachquerium.js:108 
selectViewquerium.js:691 
PaginatedView.selectSummaryViewModel.js:35 
ko.bindingHandlers.event.initknockout-2.0.0.debug.js:1949 
c.event.handlejquery-1.4.2.min.js:55 
c.event.add.j.handle.o 

?

ko.renderTemplate('assessmentControls', doc, {}, $assessments, "replaceNode"); 

및 2012 3월 9일

감사합니다,

유전자

UPDATE는 태평양 표준시 01시 52분 다음과 같이

나는 @madcapnmckay에 의해 제안 된 솔루션을 구현 템플릿에서 오류가 발생했습니다 (진행 중입니다.) :

문제의3210
Uncaught Error: Unable to parse bindings. 
Message: ReferenceError: $parent is not defined; 
Bindings value: assessment: 'REL', css: {selected: isRelevant}, button:{text: false, primary: 'assessment REL'}, filters: $parent.filters 

템플릿은 다음과 같습니다

<script id="assessmentControls" type="text/html"> 
    <div class="block docicons"> 
     <button title="Save document" 
      style="margin-top: 10px" 
      data-bind="assessment: 'REL', css: {selected: isRelevant}, button:{text: false, primary: 'assessment REL'}, filters: $parent.filters"></button> 
     <button title="Skip in future results" 
      data-bind="assessment: 'NOT_REL', css: {selected: isNotRelevant}, button:{text: false, primary: 'assessment NOT_REL'}, filters: $parent.filters"></button> 
    </div> 
</script> 

그래서 이제 문제는 예상대로 템플릿이 작동하도록 부모를 지정하는 방법입니다.

UPDATE 3월 9일 2012 오후 5시 35분 :

추가 된 jsfiddle은 위의 오류를 설명합니다.

답변

4

바인딩 내에서 템플릿을 렌더링하려면 ko.renderTemplate 메서드를 사용할 수 있습니다. 이 도움이

ko.renderTemplate(template, dataOrBindingContext, options, 
    targetNodeOrNodeArray, renderMode) 

예컨대

ko.renderTemplate("contextMenuTemplate", config, 
    { templateEngine: templateEngine }, menuContainer, "replaceNode"); 

희망.

편집

존 얼스는 의견에 명시된 바와 같이. 바인딩 데이터 또는 bindingContext를 메소드에 전달할 수 있습니다. 템플릿은 당신이 무엇을 건네 주든지간에 묶여 있습니다. $ parent 등등에 접근하기를 원한다면 그 컨텍스트를 만드는 것은 당신에게 달려 있습니다.

+0

감사합니다. 업데이트 된 질문에 표시된대로 템플릿에서 오류가 발생합니다. –

+0

JSfiddle을 추가하여 오류를 보여줄 수 있습니까? 우리는 오류를 확인할 수 있는지 확인할 수 있습니다. – madcapnmckay

+0

예제 jsfiddle을 추가했습니다. –

관련 문제