5

我的项目中很少有forms涉及大量验证和服务器调用的。所以,我想到了使用'backbone-forms.js'这些。目前我正在玩这个代码: http: //jsfiddle.net/evilcelery/VkUFu/ 看看是否'backbone-forms.js'满足我的所有需求。

当然,我们可以为https://github.com/powmedia/backbone-forms#customising-templatesindividual components中定义的“列表”、“日期”等提供我们自己的自定义模板。但在我的工作场所,所有 html 模板都应该独立于 javascript 实现,以便可以根据需要的外观编辑类和标记(javascript 编码基于不会更改的字段)。我的问题是我无法将自己的自定义模板用于使用.ids'backbone-forms.js'

有什么方法可以使 template.html 独立于 javascript(例如 handlebars.js)?

有没有办法我们可以使用已编译的车把模板和 template.html 中的所有表单字段并使用 Backbone.Form 功能,或者这是不可能的?

谢谢。

4

1 回答 1

4

如果我很好地理解了您的问题,您希望从各个来源动态加载html 模板(例如从 .../templates/category.html),而不是让 BackboneForms 从架构中呈现它或不得不以丑陋的方式定义它们像这里的javascript代码

您可以使用 ajax (或者更好,使用 Require.js)将您的 html 模板作为字符串Backbone.Form.setTemplates({templateName: templateBodyAsString})加载,然后调用. 它不会用其他名称覆盖其他已注册的模板,请参阅setTemplates下面的实现。

如果你使用$.ajax(),你可以把你的表单渲染代码放在success回调中。如果你使用Require.js,它会更容易,更不用说它的缓存机制,如果你所有的 BB 模块/表单每次都加载自己的模板,那么Require.js只会在模块第一次需要相同模板时执行 ajax 请求。

函数体Backbone.Form.setTemplates

function (templates, classNames) {
    var createTemplate = helpers.createTemplate;

    Form.templates = Form.templates || {};
    Form.classNames = Form.classNames || {};

    //Set templates, compiling them if necessary
    _.each(templates, function(template, key, index) {
      if (_.isString(template)) template = createTemplate(template);

      Form.templates[key] = template;
    });

    //Set class names
    _.extend(Form.classNames, classNames);
  } 
于 2012-11-22T19:50:05.107 回答