我在圈子裏跑來跑去,似乎在我當前的應用程序中實施backbone.js中缺少一些東西。問題是我有一個主AppView,它初始化頁面的各種子視圖(圖表,信息表等)。我的願望是能夠根據導航時傳遞的參數標誌更改頁面的佈局。骨幹視圖嵌套
我碰到的情況是,在模板渲染後引用了dom元素的子視圖在主AppView初始化過程中無法訪問這些元素。所以主要的問題是如何確保適當的dom元素適用於每個事件綁定過程以正確設置?
如果我有一個事件綁定到我的LayoutView中的模型更改,則會顯示佈局,但後續視圖無法正確呈現。我已經弄清楚的一些事情是將所有視圖的'.el'值設置爲html結構中的靜態元素。這會使渲染髮生,儘管這似乎脫離了利用'.el'提供的良好範圍限制能力。
示例代碼:
//Wrapped in jquery.ready() function...
//View Code
GraphView = Backbone.View.extend({ // init, model bind, template, supporting functions});
TableView = Backbone.View.extend({ // init, model bind, template, supporting functions});
LayoutView = Backbone.view.extend({
initialize: function() {
this.model.bind('change:version', this.render, this);
},
templateA = _.template($('#main-template').html()),
templateB = _.template($('#secondary-template').html()),
render: function() {
if ('main' == this.model.get('version')) {
this.el.html(this.templateA());
} else {
this.el.html(this.templateB());
}
},
});
MainView = Backbone.View.extend({
initialize: function() {
this.layoutView = new LayoutView({
el: $('#layoutContainer'),
model: layout,
});
this.graphView = new GraphView({
el: $('.graphContainer'),
model: graph
});
this.tableView = new TableView({
el: $('#dataTableContainer',
model: dataSet
});
},
});
// Model Code
Layout = Backbone.Model.extend({
defaults: {
version: 'main',
},
});
Graph = Backbone.Model.extend({});
dataSet = Backbone.Model.extend({});
// Router code...
// Fire off the app
AppView = new MainView($('#appContainer'));
// Create route, start up backbone history
HTML: 爲簡單起見我只是重新安排了兩個佈局之間的div。
<html>
<head>
<!-- include above js and backbone dependancies -->
</head>
<body>
<script type="text/template" id="main-template">
<div class="graphContainer"></div>
<div class="dataTableContainer"></div>
<div>Some other stuff to identify that it's the main template</div>
</script>
<script type="text/template" id="secondary-template">
<div class="dataTableContainer"></div>
<div>Rock on layout version two!</div>
<div class="graphContainer"></div>
</script>
<div id="appContainer">
<div id="nav">
<a href="#layout/main">See Layout One</a>
<a href="#layout/secondary">See Layout Two</a>
</div>
<div id="layoutContainer"></div>
</div>
</body>
</html>
感謝您對任何人都有的見解/意見。謝謝!
只是FYI,你的代碼中有一堆拼寫錯誤 - 假設它們是複製/粘貼問題,而不是實際的語法錯誤,是否安全? – nrabinowitz
責備複製/粘貼,基本的邏輯,希望仍然被傳達。感謝您指出了這一點。 – aztechy