我希望我足够清楚,否则请我澄清 我想删除与主模板协议的最终创建视图...
我确实尝试了以下实施,但未成功。
// main-template.html
<div id=""project>
<div class="main-template">
<div id="view1"></div>
<div class="foldable-block">
<div id="view2"></div>
<div id="view3"></div>
</div>
</div>
</div>
//mainView.js
define([
"js/views/view1",
"js/views/view2",
"js/views/view3",
"text!templates/main-template.html"
], function (View1, View2, View3, mainTemaplte) {
var MainView = Backbone.View.extend({
initialize: function ()
{
this.$el.html(Mustache.render(mainTemaplte));
this.render();
},
el: $("#project"),
render: function ()
{
var options = this.options;
this.view1 = new View1(options);
this.view2 = new View2(options);
this.view3 = new View3(options);
}
});
return MainView;
});
//view1.js
define([… ], function (..) {
var View1 = Backbone.View.extend({
el: $("#view1"),
initialize: function () {
console.log(this.$el) // []
setTimeout( function () {
console.log(this.$el) // []
}, 2000);
}
});
return View1;
});
您可以在view1.js
(this.$el) // []
从我的js控制台起作用:
$("#view1") // <div>….</div>
我的目标是:
1)当我加载mainView.js模块时,我想创建一个附加我的视图的模板(view1,view2,view3)
2)当我触发删除视图时,应删除附加视图的每个DOM
3)当我再次调用mainView.js
模块时,应该重新创建模板。
如果您有其他想法建议,请发帖。
感谢@nikoshr建议this.$el
,view1.j
已定义,当我在view1.js
中调用呈现时,this.$el
正确填写
但它不附在文件正文上
如何在不使用追加或类似的jquery方法的情况下创建main-template.html
?
这是我的渲染功能:
render: function ()
{
this.$el.html(Mustache.render(myTemplate, this.view);
}
答案 0 :(得分:2)
您将子视图附加到您需要时不存在的元素。这样的事情可能是朝着正确方向迈出的一步:
<强> mainView.js 强>
define([
"js/views/view1",
"js/views/view2",
"js/views/view3",
"text!templates/main-template.html"
], function (View1, View2, View3, mainTemaplte) {
var MainView = Backbone.View.extend({
initialize: function ()
{
this.render();
},
render: function ()
{
// render from template and assign this.el to the root of the element
// e.g #project
var html=Mustache.render(mainTemaplte);
this.setElement( $(html) );
// create each view with its el set to the correct descendant
this.view1 = new View1( _.extend( {el:this.$("#view1")} , this.options) );
this.view2 = new View2( _.extend( {el:this.$("#view2")} , this.options) );
this.view3 = new View3( _.extend( {el:this.$("#view3")} , this.options) );
}
});
return MainView;
});
<强> view1.js 强>
define([… ], function (..) {
var View1 = Backbone.View.extend({
initialize: function () {
console.log(this.$el);
}
});
return View1;
});
您可以使用类似
的内容重新创建视图require(["js/views/mainView"], function(MainView) {
var view=new MainView();
console.log(view.$el);
//attach the view to the DOM
$("body").append(view.$el);
});