2012-03-09 2 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 

私が正しくテンプレートをトリガするために行うには何が必要ですか?

おかげで、

遺伝子

UPDATE 2012年3月9日は、午前1時52分PST:

私は次のように@madcapnmckayによって提案されたソリューションを実装:

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

とテンプレートからエラーが発生しています(進捗状況です):

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 2012年3月9日17:35:

は、エラーの上に説明するためにjsfiddleを追加しました。

答えて

4

バインディング内からテンプレートをレンダリングするには、ko.renderTemplateメソッドを使用できます。

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

例えば

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

は、この情報がお役に立てば幸いです。

EDIT

ジョン・アールズはコメントで述べたように。バインディングデータまたはbindingContextのいずれかをメソッドに渡すことができます。テンプレートはあなたが渡したものにバインドされています。$ parentなどへのアクセスを希望する場合は、そのコンテキストを作成する必要があります。

+0

ありがとうございました。私は今更新された質問に示されているように私のテンプレートからエラーを取得しています。 –

+0

エラーを示すためにJSfiddleを追加できますか?そして、それが機能するかどうかを確認できます。 – madcapnmckay

+0

jsfiddleの例を追加しました。 –

関連する問題