我的项目中有很少的表单涉及大量的验证和服务器调用.所以,我想过为这些使用’backbone-forms.js’.目前我正在玩这个代码:http://jsfiddle.net/evilcelery/VkUFu/,看看’backbone-forms.js’是否满足我的所有需求.
当然,我们可以将自己的自定义模板提供给各个组件,例如https://github.com/powmedia/backbone-forms#customising-templates中定义的“list”,“date”等.但在我的工作场所,所有html模板都应独立于javascript实现,以便可以基于类和标记进行编辑在所需的外观上(javascript编码基于不会被改变的字段id).我的问题是我无法将自己的自定义模板用于使用’backbone-forms.js’构建的表单.
有没有办法让template.html独立于javascript(就像handlebars.js一样)?
有没有我们可以使用编译的把手模板与template.html中的所有表单字段并使用Backbone.Form功能或这是不可能的?
谢谢.
您可以随时使用ajax(或更好,使用Require.js)将html模板加载为字符串,并调用Backbone.Form.setTemplates({templateName:templateBodyAsString}).它不会覆盖其他已注册的其他名称模板,请参阅下面的setTemplates实现.
如果使用$.ajax(),则可以将表单呈现代码放入成功回调中.如果您使用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);
}