【发布时间】:2015-10-26 20:08:09
【问题描述】:
在主干中,我可以以不同的方式使用我的模型。
据我了解,(数据)模型用于存储数据(可能来自 RESTful Web 服务器),而 ViewModel 用于存储有关特定视图的信息(例如视图隐藏/显示状态)。
我的大部分知识来自this SO question。
看完this作者说的文章:
在数据更改时呈现 UI,而不是用户交互
和
流程是:用户交互->数据更改->视图渲染。
例如,如果我们在音频播放器中编写播放/暂停切换按钮,流程将是:
- 用户点击“播放”
- 模型(数据)状态变为“正在播放”
- 视图以“播放”模式呈现
遵循此模式可确保从其他来源(例如快进、新播放列表、网络错误等)触发的状态更改将切换我们的按钮以执行正确的操作。换句话说,我们有一个单一的事实来源:每当我们的模型发生变化时,我们都知道我们应该渲染我们的按钮。
var PlayPauseButton = Backbone.View.extend({
tagName: 'li',
className: 'icon',
initialize: function(){
this.model.on('change:status', this.render, this);
},
render: function(){
this.$el.removeClass('icon-play').removeClass('icon-pause');
this.$el.addClass('icon-' + (this.isPlaying() ? 'pause' : 'play'));
},
events: {
'click': function(){
this.model.set('status', this.isPlaying() ? 'paused' : 'playing');
}
},
isPlaying: function(){
return this.model.get('status') === 'playing';
}
});
我开始想知道使用每种方法的优缺点。
假设我们每个视图只有一个模型(我知道我们可以有更多,但如果我们将其限制为一个)。 我能想到,
ViewModel 专家:
- 文章中提到的那些。
- 有关视图的信息保存在模型中,防止视图混乱。
- 状态信息可以在视图之间共享。
缺点:
- 不能调用 Backbone 的 save() 方法,因为这会导致模型将不正确的数据保存到服务器(例如视图状态)。
- 不能轻易调用 Backbone 的 fetch() 方法,因为我们可能会践踏我们的视图数据。
(数据)模型专家:
- 使用主干的内置保存、获取等功能。
- 视图可以共享数据,而无需担心视图中存储的特定数据。
缺点:
- 模型只能用于数据
我这样想对吗?
我应该为我的数据建立一个模型,为我的视图建立一个模型吗?
这如何与集合一起使用?
我知道 Backbone 非常松散,没有硬性规定。 但是,有没有人有任何使用其中一种或另一种的实际经验?或者两者都有?
感谢任何帮助。
【问题讨论】:
标签: javascript jquery backbone.js mvvm