我正在使用backbonejs创建表单构建器应用程序,并想知道如何动态加载视图 我有一个下拉列表,我可以选择添加什么类型的元素,例如我选择输入字段。我有一些默认值,与formtemplate中的每个元素一起使用,并根据选择的字段我想加载不同的html模板。
define([
'jquery',
'underscore',
'backbone',
'modal',
// Pull in the Collection module from above
'collections/builder',
'text!templates/forms/builder.html',
'text!templates/forms/formsTemplate.html',
'text!templates/forms/textBox.html',
'models/builder'
], function ($, _, Backbone, popupModal, attributesCollection, builderTemplate, formsTemplate, inputTemplate, attributesModel) {
var attributesBuilderView = Backbone.View.extend({
el: $("#page"),
initialize: function () {
},
render: function () {
this.loadTemplate();
},
loadTemplate: function () {
var that = this;
this.el.html(builderTemplate);
},
// Listen to events on the current el
events: {
"change #attributeType": "loadAttributeTemplate"
},
loadAttributeTemplate: function () {
if ( ($("#attributeType").val()) != '0') {
$("#attributesArea").append(_.template(formsTemplate, { elementType: $("#attributeType :selected").text(), _: _ }));
var template = $("#attributeType").val() + 'Template';
$(".formElement").html(_.template(template));
}
}
});
return new attributesBuilderView;
});
这里当我运行这段代码时,如果我把$(“。formElement”)放在html(_。template(inputTemplate))中,我会在html而不是模板中获取inputTemplate文本。它工作正常。我只需要知道如何动态加载这些
提前致谢
答案 0 :(得分:2)
如果您只想进行条件加载,可以将require调用放在任何位置:
已编辑(将函数参数添加到require语句中)
loadAttributeTemplate: function () {
if ( ($("#attributeType").val()) != '0') {
require(['text!templates/forms/builder.html',
'text!templates/forms/formsTemplate.html',
'text!templates/forms/textBox.html'],
_.bind(function(builder, formsTemplate, textBox) {
$("#attributesArea").append(_.template(formsTemplate, { elementType: $("#attributeType :selected").text(), _: _ }));
var template = $("#attributeType").val() + 'Template';
$(".formElement").html(_.template(template));
},this);
);
}
}
注意,我还做了一个_.bind(...,this)来维护执行范围。我知道这里不一定需要它,但它确实派上用场了。
我在申请的几个地方这样做;特别是当我想在我需要时才加载模块。