我迁移骨干基本应用木偶,我想用ICanHaz.js作为模板系统(基于胡子)。
我使用的是AMD和Require.js和只有这样才能使ICanHaz.js它和骨干的工作是使用jvashishtha的版本 。
我第一次在纯骨干风格实现的应用程序。
我特别用于加载每个模板作为与原始字符串Require.js'文本插件 ,然后将模板添加到ICH对象。 这在创建具有装载模板同名ICH对象的方法:
define([
'jquery',
'underscore',
'backbone',
'iCanHaz',
'models/Job',
'text!templates/Job.html'
], function( $, _, Backbone, ich, Job, jobTemplate) {
var JobView = Backbone.View.extend({
render: function () {
/* since the render function will be called iterativetly
at the second cycle the method ich.jobRowTpl has been already defined
so ich will throw an error because I'm trying to overwrite it.
That is the meaning of the following if (SEE: https://github.com/HenrikJoreteg/ICanHaz.js/issues/44#issuecomment-4036580)
*/
if (_.isUndefined(ich.jobRowTpl)){
ich.addTemplate('jobRowTpl', jobTemplate);
};
this.el = ich.jobRowTpl(this.model.toJSON());
return this;
}
});
return JobView;
});
到现在为止还挺好。 这个问题是与木偶。
上面的代码工作正常,在骨干版本,但也没有必要来定义木偶的观点渲染功能。
木偶假设默认使用UnderscoreJS模板。 别人已经问了如何使用小胡子与木偶 。
从这个问题的答案我试图实现我的解决方案。 在app.js:
app.addInitializer(function(){
//For using Marionette with ICH
var templateName=''; //not sure if this would help, anyway it makes no difference
Backbone.Marionette.Renderer.render = function(template, data){
if (_.isUndefined(ich.template)){
//this defines a new template in ich called templateName
ich.addTemplate(templateName, template);
};
return ich.templateName(data);
}
但是,控制台抛出我:
Uncaught TypeError: Object #<Object> has no method 'templateName'
所以模板尚未确定。 无论如何,任何暗示,如果我在正确的方向吗?