制作一个模型的最佳方式'选择'Backbone.js系列中
Best way to make one model 'selected' in a Backbone.js collection?
Backbone.js应用程序中有一组模型。
这是一个项目列表,您可以用鼠标悬停在上面或用键盘导航。
如果鼠标悬停,或者键盘导航选择了项目,他们都会做同样的事情:将特定项目/模型设置为"选定"。
所以在我的模型中,我有一个基本上叫做的属性
selected: false
当它悬停在上面或用键盘选择时,这将是
selected: true
但是,当这一个模型是真的时,确保其他模型都是假的最好方法是什么?
我目前正在做一件基本的事情,即循环浏览集合中的每个模型,然后将选定的模型设置为true。但我想知道是否有更好、更有效的方法来做到这一点?
被选中似乎是模型范围之外的责任。选择的概念意味着还有其他人,但一个模型只能担心自己。因此,我会考虑将这一责任转移到其他地方,在那里,许多模型和选择一个模型的概念似乎更自然,也更令人期待。
因此,考虑将这一责任作为一个协会放在藏品上。因此,这个.selected将指向选定的模型。然后,您可以添加一个方法来返回集合中的选定模型。
或者,您可以将此责任交给视图。如果模型的可选性纯粹是视图层中的一个问题,则可以执行此操作。
从模型中删除责任的副产品是,当选择新模型时,您不需要在整个集合中循环。
我就是这样做的。集合存储对所选模型的引用,但状态保存在模型中。然后,这可以被调整为允许更复杂的算法来选择选择哪些模型。
JobSummary = Backbone.Model.extend({
setSelected:function() {
this.collection.setSelected(this);
}
});
JobSummaryList = Backbone.Collection.extend({
model: JobSummary,
initialize: function() {
this.selected = null;
},
setSelected: function(jobSummary) {
if (this.selected) {
this.selected.set({selected:false});
}
jobSummary.set({selected:true});
this.selected = jobSummary;
}
};
我做了Eisenhauer先生建议的事情。我也想要分页数据的概念。我真的不想把选定的、页码等混合到集合本身中,所以我为表数据创建了一个"模型",并称之为快照。类似这样的东西:
JobSummary = Backbone.Model.extend({});
JobSummaryList = Backbone.Collection.extend({
model: JobSummary
};
JobSummarySnapshot = Backbone.Model.Extend({
defaults: {
pageNumber: 1,
totalPages: 1,
itemsPerPage: 20,
selectedItems: new JobSummaryList(), // for multiple selections
jobSummaryList: new JobSummaryList()
}
});
查看Backbone.CollectionView,它支持在开箱即用时选择模型。可以使用setSelectedModel
方法实现的悬停情况。
您可能想看看我的两个组件:
- 主干。选择
- Backbone.Cycle
主干。Select具有最小的表面积。将尽可能少的方法添加到对象中。这个想法是你应该能够使用Backbone。几乎在任何地方都选择混合,冲突的风险几乎为零。
Backbone.Cycle建立在Backbone.Select.之上。它添加了导航方法和更多的提示。这可能是绿地项目的更好选择。
- 下拉选择可自动更改第二个下拉选择
- 如何使用jQuery选择下拉列表的值
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 按照选项卡索引的顺序循环一个jQuery选择
- 在动态创建的元素上获取对特定选择器的引用
- backbone.js无法渲染视图
- AngularJS-在JSON选择器中使用变量名
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 获取选择框的状态
- d3基于用户选择动态更新节点
- 选择一个MVC框架(Javascript - 前端) - Backbone,Angular,Ember
- 使用Backbone.js从列表中选择元素
- Backbone.js:如何只处理单个视图的选择
- 选择:dojo、backbone.js、knockout.js(或其他)用于Rails 3.1应用程序
- 在使用jQuery的Backbone.js中,在视图中选择元素的正确方式是什么
- Backbone js如何与css选择器交互
- 制作一个模型的最佳方式'选择'Backbone.js系列中
- backbone.js中jQuery.find的CSS选择器等效项
- 为什么我不能在 Backbone 的视图事件中的一个语句中将单个事件绑定到多个选择器