2012-03-02 1 views

답변

0

<li>{{user.firstName}} {{user.lastName}}</li>

이 (<li>에서 가정) 루프의 경우 이것은 핸들, 은요 도우미에서 작업 한 후 {{} 책 "제목"을 얻을} 사용됩니다 {{this.firstname}}

+0

이것은 잘못되었습니다. 백본 모델은 set() get()이있는 객체입니다. 나는이 객체를 .toJSON()을 호출하지 않고 컨텍스트에서 전달하는 것에 관한 질문이라고 생각한다. 더 일반적으로 json 객체 대신 json 객체로 작업 할 수 있습니까? 컨텍스트 개체 메서드를 호출하는 권장 방법은 무엇입니까? 아니면 내가하지 않을거야? 덕분에 – cancerbero

+0

@cancerbero, 하나는 핸들 바를 사용하기 위해 백본이 필요하지 않습니다. 문맥을 감안할 때 제 대답은 옳습니다. – soemarko

0

해야하지만 :

Handlebars.registerHelper('get', function(model, attributeName) 
{ 
    return model.get(attributeName); 
}); 

var templateStr = '<div class="book-title">{{get preferredBook "title"}}</div>'; 

var Book = Backbone.Model.extend({}); 
var b = new Book({title: 'Lord of the rings'}); 
var context = { 
    preferredBook: b 
}; 

var template = Handlebars.compile(templateStr); 

var output = template(context); 
expect(output).toBe('<div class="book-title">Lord of the rings</div>'); 
0

핸들 바 컴파일러를 사용자 정의하는 것이 더 좋지만 시간은 많이 걸립니다. 런타임에가 아니라 템플릿을 컴파일하는 데 사용하는 다음 코드를 스크립트에 추가해야합니다. 이 코드를 런타임이 아닌 컴파일 코드에 추가하십시오. 이것은 도우미가 아닙니다. 그런 다음 {{model.title}}을 작성하면 해당 표현식이 컴파일러에 의해 자동으로 model.get ('title')으로 변환됩니다. 물론 'model'이 Backbone.Model이 아니면 평소처럼 json 속성에 액세스합니다.

Handlebars.JavaScriptCompiler.prototype.nameLookup = function(parent, name) 
{ 
    var result = '((typeof(Backbone)!="undefined" && ' + parent + ' instanceof Backbone.Model) ? ' + parent + '.get("' + name + '") : ' + parent; 
    if (/^[0-9]+$/.test(name)) 
    { 
     return result + '[' + name + '])'; 
    } 
    else if (Handlebars.JavaScriptCompiler.isValidJavaScriptVariableName(name)) 
    { 
     return result + '.' + name + ')'; 
    } 
    else 
    { 
     return result + '[\'' + name + '\'])'; 
    } 
};