【发布时间】:2017-03-05 23:45:41
【问题描述】:
我正在尝试使用 Knockout js 完成一些基本的添加和删除功能。
我正在使用 asp mvc,淘汰映射插件并返回一个简单的字符串列表作为我的 viewModel 的一部分
目前我从服务器获得三个项目,我创建的功能允许我删除这些项目中的每一个。我还可以添加一个项目。但是,如果我尝试删除我在 KO 脚本中添加的项目,我将无法删除它。
在完成研究和一些测试后,我想我错误地使用了 observable。我更改了我的代码以通过ko.observable(""),但这并没有奏效。我做错了什么?
加载值
数组[4]0:“测试1”1:“测试2”2:“测试3”长度:4__proto__:数组[0]
点击添加后的值
数组[4]0:“测试1”1:“测试2”2:“测试3”3:c()长度:4__proto__:数组[0]
ko 脚本
var vm = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
this.deleteBulletPoint = function (bulletPoint) {
self.BulletPoints.remove(bulletPoint)
}
this.addEmptyBulletPoint = function () {
self.BulletPoints.push(ko.observable(""));
console.log(self.BulletPoints())
}
}
HTML
<div class="col-lg-6 col-md-6 col-sm-12">
<h4>Bullet Points</h4>
<div id="oneLinedescriptions" class="input_fields_wrap">
<!-- ko foreach: BulletPoints -->
<div class="form-group">
<div class="input-group">
<input type="text" data-bind="value: $data" class="form-control">
<span data-bind="click: $parent.deleteBulletPoint" class="input-group-addon btn">-</span>
</div>
</div>
<!-- /ko -->
</div>
<button id="btnAddDescription" data-bind="click: addEmptyBulletPoint" type="button" class="btn btn-default add_field_button col-lg-12 animate-off">Add New Bullet Point</button>
</div>
编辑
我已删除$parent,但返回以下错误
未捕获的 ReferenceError: 无法处理绑定“foreach: function (){return BulletPoints }” 消息:无法处理绑定“点击:函数(){return deleteBulletPoint}” 消息:deleteBulletPoint 未定义
除此之外,我还能够添加新的空元素,但是当用户更改值时它们不会更新。这是因为我添加的元素是不可观察的吗?如果是这样,我该如何绕过它?
【问题讨论】:
-
“他们没有更新”到底是什么意思?哪个字段没有更新,BulletPoints 数组中的字符串值?您在哪里定义 BulletPoints,是 observableArray 还是普通数组?你能显示那个代码吗?