2013-06-10 2 views
0

텍스트 조각에 바인딩을 적용하는 가장 좋은 방법은 무엇입니까? 텍스트 조각에 녹아웃 바인딩

나는 다음 코드를 사용하여 IP 온 :

var textFragment = '<div><p data-bind="text: text"></p></div>', 
    htmlTemplate = ko.utils.parseHtmlFragment(textFragment); 

ko.applyBindings({ 
    text: "text" 
}, htmlTemplate[0]); 

alert(htmlTemplate[0].innerHTML); 
document.getElementById("test").innerHTML = htmlTemplate[0].innerHTML; 

(Fiddler)

DOM 노드를 만들고 여기에 abinding 시만 후 나는 페이지에 삽입합니다. 나는 녹아웃 코드를 던져 보았고, 템플릿을 렌더링하는 몇 가지 기능이 있다는 것을 알았고, 그 방법이 더 잘 작동하는지 궁금해했다. 나는 그들을 사용하려고했지만 결과 코드가 길어서 예상대로 작동하지 않았다.

감사합니다, 스테판

(하지 : 이것은 단지 내 문제를 설명하는 간단한 데모입니다, 나는 사용자 지정 바인딩 처리기를 사용하고 있습니다).

+0

같은 사용자 지정 바인딩에서 특정 템플릿을 사용할 수 있습니다 ? 올바르게 사용하면 훨씬 더 간단 해집니다. http://jsfiddle.net/Q3cUa/ – nemesv

+0

그래, 다른 것을 이루고 싶었어. 몇 가지 DOM 객체를 만든 다음 jQueryUI에 남기는 cosutm 바인딩 핸들러를 만들고 싶습니다. 그건 내가 정상적인 템플릿을 사용할 수 없기 때문이다. kncout 바인딩은 DOM 객체를 바인딩 컨텍스트 밖으로 이동시킬 수있는 jQueryUI로 itnerfeat을 발생시켜 knocout이 충돌을 일으킬 수 있기 때문이다 ..... 나는 그녀에게 가지고있는 아주 근심없는 문제이다. – Stefan

+0

이 주석은 어떻게 도움이 되는가 @nemesv? 그는 스크립트에서 DOM의 템플릿을 원하지 않습니다. – Anders

답변

1

기본 소스 엔진을 무시하고 싶은 소리가납니다.

//string template source engine 
var stringTemplateSource = function (template) { 
    this.template = template; 
}; 

stringTemplateSource.prototype.text = function() { 
    return this.template; 
}; 

var stringTemplateEngine = new ko.nativeTemplateEngine(); 
stringTemplateEngine.makeTemplateSource = function (template) { 
    return new stringTemplateSource(template); 
}; 

당신이 템플릿을 사용하려고 어떻게 그런 다음

ko.setTemplateEngine(stringTemplateEngine); 

같은 기본 엔진으로 사용하거나 설명 할 수

var myTemplate = '<div><p data-bind="text: text"></p></div>'; 
ko.renderTemplate(myTemplate, bindingContext.createChildContext(valueAccessor()), { templateEngine: stringTemplateEngine }, element, "replaceChildren");