2
在閱讀了過去幾周的Marionette和一般的MVC架構之後,我仍然不清楚MV *中的View究竟應該做什麼。我讀過的每個代碼示例,博客文章或教程都將不同數量的邏輯放在視圖中,或使用基本棄用的.on
事件處理。視圖實際上應該做什麼?
我的直覺告訴我,該模型包含數據,視圖火災事件,以及控制器監聽並處理這些事件。我努力盡可能多地保留視圖中的邏輯,就像聽起來那樣怪異。
作爲一個例子,我創建了一個JSFiddle,只需在控制器中使用.listenTo
即可將一個視圖切換到另一個視圖。我本來可以使用佈局和切換區域,但我希望儘可能小的代碼。
我在正確的軌道上嗎?應該如何看待只有呈現一個界面和吶喊事件,而不在View代碼中對它們中的任何一個進行操作?這個邏輯應該在控制器中嗎?或者這是否偏離了擁有精益控制器的原則?
謝謝。
下面是詳細代碼:
HTML
<script id="part1-template" type="text/template">
<%= part1blurb %> <input type="button" id="goToPart2" value="OK" />
</script>
<script id="part2-template" type="text/template">
<%= part2blurb %>
</script>
<div id="main"></div>
型號
var MyModel = Backbone.Model.extend({
defaults: {
part1blurb: 'This is part one',
part2blurb: 'This is part two'
}
});
查看
var Part1View = Backbone.Marionette.ItemView.extend({
model: new MyModel(),
template: '#part1-template',
triggers: {
'click #goToPart2': 'part1:done'
}
});
var Part2View = Backbone.Marionette.ItemView.extend({
model: new MyModel(),
template: '#part2-template'
});
控制器
var PageController = Backbone.Marionette.Controller.extend({
_views: {
part1: new Part1View(),
part2: new Part2View()
},
initialize: function() {
this.listenTo(this._views.part1, 'part1:done', function() {
this._showPart(this._views.part2);
});
},
start: function() {
this._showPart(this._views.part1);
},
_showPart: function(view) {
PageTest.mainRegion.show(view);
}
});
應用
var PageTest = new Backbone.Marionette.Application();
PageTest.addRegions({
mainRegion: '#main'
});
var controller = new PageController();
controller.start();
那麼,你基本上會產生像我上面的例子代碼呢? – siddhartha