数据绑定-在Javascript中数组改变时更新有序列表
data binding - Update ordered list when array changes in Javascript
所以我已经使用了很多Backbone和Angular,并习惯了在这些生态系统中进行数据绑定/视图更新,但我不知道如何在纯JS中实现这一点(没有框架/库)。
现在我有一个简单的UserList
,我想观察它的变化,并在它发生时触发和更新一个无序列表。
var ContactList = {
list: [],
push: function(obj) {
this.storage.push(obj);
},
remove: functon(obj) {
return this.storage.splice(this.storage.indexOf(obj), 1);
}
};
var Contact = function(attributes) {
this.attributes = attributes || {};
};
Contact.prototype.get = function(property) {
return this.attributes[property];
};
Contact.prototype.set = function(property, value) {
this.attributes[property] = value;
};
理想情况下,下列内容将自动添加到列表中。我可以只给push和remove功能添加一个回调,但如果我要添加更多功能来操作我的列表,它似乎不能很好地扩展。我已经阅读了一些关于观察者模式的内容,但不确定这是否真的是我在这里寻找的。
您不希望将回调传递给每次调用ContactList。push和ContactList。删除和所有的ContactList方法,你还没有写。相反,联系人列表会知道他什么时候改变了,然后向全世界宣布这一事实。在一个简单的实现中,ContactList可以有他自己的onChange方法,他可以调用:
var ContactList = {
list: [],
push: function (obj) {
this.list.push(obj);
this.onChange();
},
remove: function (obj) {
var index = this.list.indexOf(obj);
if (index > -1) {
var removed = this.list.splice(index, 1);
this.onChange();
return removed;
} else {
return null;
}
}
};
显然,你必须定义ConactList。onChange:
ContactList.onChange = function () {
console.log(this.list);
/* update your ul element */
};
此解决方案不允许您动态地将订阅者添加到Contact List的更改事件中,但它可能是一个有用的起点。
相关文章:
- 正在更新列表框所选索引
- 如何更新列表项由jQuery AJAX调用添加的ASP Dropdown:错误无效的回发或回调
- 使用jquery添加和更新列表
- 在不可变JS中更新列表中的对象
- 余烬 js 不更新列表从模板中的模型检索
- 动态更新列表中的数据
- SharePoint 2010 - Javascript 根据标题更新列表项值
- SharePoint 2013 更新列表项时保存冲突错误
- SPServices更新列表项未更新
- Yii,通过ajax更新列表,无法理解它是如何工作的;
- jquery mobile切换到更新列表
- 上传文件时通过AJAX更新列表
- SPServices - JQuery - 调用以更新列表项
- 正在更新列表项的类-jQuery
- 更新列表项目类别单击
- 使用AJAX的Ruby on Rails更新列表打破了顺序
- AJAX/jQuery在同一页面上添加表单和更新列表的最佳实践
- 如何在angularjs中更新列表
- react -原生更新列表视图数据源
- 使用jquery更新列表顺序