EDIT: Vergessen Sie die Leser daran zu erinnern, dass ich templateSettings zu setzen erinnerte wie folgt:Kann nicht bekommen Variablen in Underscore.js Vorlage zu interpolieren, während jasmine.js Test
_.templateSettings = {
interpolate : /\{\{([\s\S]+?)\}\}/g
};
Ich habe eine harte Zeit mit einem immer Variabel um im Unterstrich zu interpolieren, während meine Jasmine-Spezifikationen laufen. In Anbetracht der Vorlage, Rendering-Methode und Jasmin Test unten, ich bin in der Lage die Vorlage erhalten Variablen zu interpolieren richtig über:
_.template(
boneHeaderInstance.template.html(),
{ id:boneHeaderInstance.id,
columns:boneHeaderInstance.columns
}
)
Während dies die Spalten zu interpolieren nicht variabel:
boneHeader = Backbone.View.extend({
el: $('#boneTableHeader'),
template: $('#boneTableHeaderTemplate'),
initialize: function(){
this.id = 'boneTableHeader';
this.el = $('#' + this.id);
this.columns = 'blah';
this.template = $('#' + this.id + 'Template');
this.render();
return this;
},
render: function(){
var that = this;
var data = {id: that.id, columns: that.columns}
this.el.html(_.template(this.template.html(), data));
}
});
Vorlage:
<script type = 'text/template' id = 'boneTableHeaderTemplate'>
<tr id = "{{obj.id}}Row">
{{obj.columns}}
</tr>
</script>
In Render Methode:
render: function(){
var that = this;
var data = {id: that.id, columns: that.columns}
this.el.html(_.template(that.template.html(), data));
}
Jasmin Test:
describe('boneHeader', function(){
beforeEach(function(){
boneHeaderInstance = boneTableInstance.header;
});
describe('rendering', function(){
it('should have expected html', function(){
expect(
boneHeaderInstance.el.html().replace(/\s\t\n/ , '', 'g')
).toEqual(
_.template(boneHeaderInstance.template.html(),
{ id:boneHeaderInstance.id,
columns:boneHeaderInstance.columns
}).replace(/\s\t\n/ , '', 'g')
);
});
});
});
Jasmin Ergebnis:
Expected ' <tr id="boneTableHeaderRow"></tr> ' to equal ' <tr id = "boneTableHeaderRow"> blah </tr> '
Danke. Ich dachte, ich hätte die 'templateSettings' eingefügt. Ich benutze das und werde meine Frage aktualisieren, um dies zu reflektieren. Entschuldigung für die Verwirrung. Den Rest der Antwort jetzt überblickend. – kikuchiyo
Ich verdaue immer noch den Rest der Antwort. Ich stimme zu, dass "obj" nicht benötigt wird. Weißt du, warum 'obj.id' und' obj.columns' in diesem Code '_.template ( boneHeaderInstance.template.html() funktioniert, {id: boneHeaderInstance.id, Spalten: boneHeaderInstance.columns } ) 'mit der Vorlage in meiner Antwort? Wenn nicht, kein Problem, nur wundernd. Ich glaube auch nicht, dass das ein Problem ist. Wenn man bedenkt, interpoliert es korrekt für 'obj.id' in der Jasmine-Nachricht:' Erwartet '
Was bedeutet, dass Sie wahrscheinlich das korrigieren Das Problem liegt wahrscheinlich darin, die '{{obj.columns}}' direkt nach dem '
Verwandte Themen