我正在开发一个用于编辑内容的动态表单,我需要能够添加主干子视图/模块/插件并将它们绑定到从另一个视图呈现的标记。这个主窗体/视图的特殊之处在于,作为第三方开发人员,我无法更改此视图,所以我需要一种加载机制,用于在主视图中创建子视图的实例,但仅在加载主视图时. 我做了一个小小提琴来显示我想要做什么,在这个例子中,包含复选框的视图需要知道何时加载编辑器视图,以便我可以创建它的实例并将其绑定到正确的 el。
这是我正在使用的脚本
// This code cannot be altered by the developer who's creating the module/plugin
var EditorView = Backbone.View.extend({
template:_.template($('#tpl-main-view').html()),
initialize: function () {
},
render: function (eventName) {
var html = this.template();
$(this.el).html(html);
return this;
}
});
// This module/plugin needs to be aware of when the editor view is loaded
var SubModule = Backbone.View.extend({
events: {
'click input[type=checkbox]' : 'publish'
},
publish: function() {
alert('publish...');
}
});
var Container = Backbone.View.extend({
events: {
'click button' : 'loadView'
},
loadView: function() {
var view = new EditorView();
$('body').append(view.render().el);
}
});
var main = new Container({el: $('#container')});
var module = new SubModule({el: $('#sub-view')});
这是我在小提琴中使用的 html
<div id="container">
<button>Load</button>
</div>
<script id="tpl-main-view" type="text/template">
<form>
<fieldset>
<legend>Edit</legend>
<label>Name:</label>
<input type="text" />
<br />
<!-- Sub module start -->
<div id="sub-view">
<label>Published</label>
<input type="checkbox" />
</div>
<!-- Sub module end -->
</fieldset>
</form>
</script>
用可能的答案更新了我的问题,但我不知道这是否是解决问题的最佳方法。是否可以使用 require js 或类似方法解决此问题?我认为 Dojo 有一些方法可以确定何时加载其他视图。
一个可能的解决方案:http: //jsfiddle.net/9phHk/1/