从 Knockoutjs 中的可观察数组中删除项目
Removing item from observablearray in Knockoutjs
我正在尝试学习Knockoutjs,并且在向可观察数组添加和删除对象时遇到了一些问题。
我有以下视图模型,其中我从 Web 服务获取一些数据并填充一些 html。这工作正常。但是不起作用的是从可观察数组中删除项目,因为点击事件似乎没有调用 removeEmployee。
function EmployeeViewModel(){
var self=this;
self.employees=ko.observableArray();
self.removeEmployee = function(item) {
self.employees.remove(item);
};
}
function success(data) {
EmployeeViewModel.employees=ko.mapping.fromJS(data);
ko.applyBindings(EmployeeViewModel);
};
ApiCall({
data: {
[get data]
},
onSuccess: function(data){success(data.result)}
});
和以下 html:
<div data-bind="foreach: employees">
<h2>Hello, <span data-bind="text: full_name"> </span>!</h2>
<button data-bind="click: $parent.removeEmployee">Remove</button>
</div>
我尝试在这里设置一个 jsfiddle:http://jsfiddle.net/8yX5M/其中删除项目确实有效。不同之处在于,在jsfiddle中,项目不是从外部源获取的,我使用removeEmployee而不是$parent.removeEmployee。
任何想法为什么非 jsfiddle 版本不起作用?
谢谢托马斯
因为您的成功函数没有设置 observableArray 的值,所以它正在重置对象的定义 -
function success(data) {
EmployeeViewModel.employees(ko.mapping.fromJS(data));
ko.applyBindings(EmployeeViewModel);
};
使用 EmployeeViewModel.Employees 上的 setter 函数,方法是使用 () 并传入一个值。
事实证明,
这是因为我在映射数据之前没有将 EmployeeViewModel 实例化为全局变量。
工作代码是
'use strict';
var employeeViewModel=new EmployeeModel();
function EmployeeModel(){
var self=this;
self.employees=ko.observableArray();
self.removeEmployee = function(item) {
self.employees.remove(item);
};
}
function getEmployeesSuccess(data,controlIds) {
employeeViewModel.employees=ko.mapping.fromJS(data);
var _i=0;
for (var _total=controlIds.length; _i < _total; _i++) {
ko.applyBindings(employeeViewModel,$("#"+controlIds[_i])[0]);
}
};
/* Databinds employeedata to an array of controls */
/* controlIds=Array of controls*/
function DataBindEmployees(controlIds)
{
ApiCall({
data: {
[get data]
},
onSuccess: function(data){getEmployeesSuccess(data.result, controlIds)} });
};
相关文章:
- 数组删除重复结果Javascript
- 使用javascript/jquery从现有数组中创建一个新数组,该数组保存项目存在的次数
- 什么's JavaScript数组中项目的作用域
- 查找数组中项目包含子字符串的索引
- 更新挖空中可观察数组中项目的属性
- 对于数组 {{显示项目}} 中的每个项目
- 字符串替换或通过数组删除
- 按数组中项目的最后一个排序
- 更改数组中项目的颜色,javasccript程序
- js中的对象数组:删除重复项
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 循环时更改数组中项目的样式是't工作
- 用于垃圾收集的Javascript数组删除
- 为什么”——数组.删除数组的最后一个元素
- PHP循环通过脚本数组&删除项目
- 我需要在jquery帮助,使数组的项目名称
- 谷歌地图API:试图使用数组删除多个标记
- 我应该在哪里平数组的项目收集骨干
- 如何通过文本搜索返回JSON数组中项目的索引位置?
- 替换数组中项目的实例