나는 이런 식으로 뭔가를 내 handlebars.js 템플릿을 얻으려고 :handlebars.js 템플릿에서 getters를 사용하는 방법은 무엇입니까?
<li>{{ user.get('firstName') }} {{ user.get('lastName') }}</li>
를 분명하지만, 그것은 작동하지 않습니다. handlebars.js에는 위의 getter를 직접 사용할 수있는 구문이 있습니까?
감사합니다.
나는 이런 식으로 뭔가를 내 handlebars.js 템플릿을 얻으려고 :handlebars.js 템플릿에서 getters를 사용하는 방법은 무엇입니까?
<li>{{ user.get('firstName') }} {{ user.get('lastName') }}</li>
를 분명하지만, 그것은 작동하지 않습니다. handlebars.js에는 위의 getter를 직접 사용할 수있는 구문이 있습니까?
감사합니다.
<li>{{user.firstName}} {{user.lastName}}</li>
이 (<li>
에서 가정) 루프의 경우 이것은 핸들, 은요 도우미에서 작업 한 후 {{} 책 "제목"을 얻을} 사용됩니다 {{this.firstname}}
해야하지만 :
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>');
핸들 바 컴파일러를 사용자 정의하는 것이 더 좋지만 시간은 많이 걸립니다. 런타임에가 아니라 템플릿을 컴파일하는 데 사용하는 다음 코드를 스크립트에 추가해야합니다. 이 코드를 런타임이 아닌 컴파일 코드에 추가하십시오. 이것은 도우미가 아닙니다. 그런 다음 {{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 + '\'])';
}
};
이것은 잘못되었습니다. 백본 모델은 set() get()이있는 객체입니다. 나는이 객체를 .toJSON()을 호출하지 않고 컨텍스트에서 전달하는 것에 관한 질문이라고 생각한다. 더 일반적으로 json 객체 대신 json 객체로 작업 할 수 있습니까? 컨텍스트 개체 메서드를 호출하는 권장 방법은 무엇입니까? 아니면 내가하지 않을거야? 덕분에 – cancerbero
@cancerbero, 하나는 핸들 바를 사용하기 위해 백본이 필요하지 않습니다. 문맥을 감안할 때 제 대답은 옳습니다. – soemarko