骨干木偶和ICanHaz(小胡子)模板配置(Backbone Marionette and ICan

2019-10-17 14:59发布

我迁移骨干基本应用木偶,我想用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' 

所以模板尚未确定。 无论如何,任何暗示,如果我在正确的方向吗?

Answer 1:

我认为这只是你的渲染函数中的JS问题。

这条线:

返回ich.templateName(数据);

将寻找一个字面上叫“TEMPLATENAME”模板

你想,因为TEMPLATENAME是一个变量什么是一样的东西:

return ich[templateName](data);

然后,它会interprete的TEMPLATENAME变量的值来代替。



文章来源: Backbone Marionette and ICanHaz (Mustache) templates configuration