KnockoutJS不选择复选框列表中的选中值
KnockoutJS not selecting checked value on checkbox list
我在复选框列表中的复选绑定有问题。
JS
function vm() {
var self = this;
self.categories = [
{id: 1, name: "Category 1"},
{id: 2, name: "Category 2"},
{id: 3, name: "Category 3"}
];
// Assume this item came from server side,
// that's why i'm using the mapping plugin here.
var rawItem = { links: [1] };
self.item = ko.mapping.fromJS(rawItem);
}
ko.applyBindings(new vm());
HTML <div data-bind="foreach: categories">
<div>
<label>
<span data-bind="text: name"></span>
<input class="checkbox" type="checkbox" data-bind="checked: $root.item.links, attr: {value: id}">
</label>
</div>
</div>
<div data-bind="text: ko.toJSON(item.links)"></div>
JSFiddle
如您所见,第一个问题是self.category
项的"id"属性以某种方式被强制转换为字符串,这导致比较失败。无论如何,将项目links
转换为string也不会像预期的那样工作。
简而言之,目标是:根据categories
数组的值检查页面加载的字段。
因为我是从一个更复杂的场景中复制的,所以我添加了映射插件来放置任何可能的因素。
你的Json对象有无效的键,Json只允许键名是字符串。这就是为什么您将id
视为字符串。
<div data-bind="foreach: categories">
<div>
<label>
<span data-bind="text: name"></span>
<input class="checkbox" type="checkbox" data-bind="value: id, checked: $root.item">
</label>
</div>
</div>
<div data-bind="text: ko.toJSON(item)"></div>
JavaScript function vm() {
var self = this;
self.categories = [
{id: "1", name: "Category 1"},
{id: "2", name: "Category 2"},
{id: "3", name: "Category 3"}
];
// Assume this item came from server side,
var rawItem = { links: ["1"] };
self.item = ko.observableArray(rawItem.links);
}
ko.applyBindings(new vm());
这是jsfiddle
这里有两个问题。
1)转换为string
<input class="checkbox" type="checkbox" data-bind="checked: $root.item.links, value: id">
"value"绑定在比较之前由KO本身以某种方式强制转换为字符串。事实上,如果我尝试为类别id使用整数值,并为项目链接使用字符串值,则选中的绑定正在工作。你可以在这里看到
似乎用于检查category.id == item.links[i]
的id
属性被强制转换,将比较转换为"1" == 1
(如果item.links = [1, 2, 3]
)或"1" == "1"
(如果item.links = ["1", "2", "3"]
),即使每个category.id
都是整数。
2)
如果checked
绑定在binding
之前声明,则检查操作在第一次修改值之后进行。看到这里:与工作代码的唯一区别是value
出现在checked
之前。试着加载这个文件,并检查选项3。
因此,为了修正这些,
- 项目。链接的值必须是字符串
- 正确的绑定顺序是:value:id, checked: $root.item.links
相关文章:
- Angular:使用选择列表选择过滤代码中的对象
- JavaScript类列表选择器错误
- 将下拉列表“选择值”传递到 URL
- 禁用基于下拉列表选择 asp.net JavaScript 启用文本框
- 下拉列表<选择>为列表.js
- 经典 ASP - 下拉列表:选择与第一个下拉列表具有相同值的所有下拉列表
- 映射下拉列表选择到URL
- 删除基于先前下拉列表选择的“选择下拉列表”选项
- 在下拉列表选择中显示模态
- 下拉列表选择的值在UI淘汰js中没有更新
- 如何将 ID 分配给动态下拉列表选择
- 使用 dojo 将鼠标悬停在动态下拉列表选择上时添加工具提示
- 链接下拉列表选择列表代码 -- 连接数据
- Javascript 不遵循下拉列表选择
- 检索引导下拉列表选择文本
- 表单事件更改不适用于下拉列表选择
- 无法检测加载时的选择/下拉列表选择事件
- 将 CakePHP 命名参数添加到列表选择的 URL 中
- 为什么聚合物核心列表选择中的切换操作不正确
- 为列表选择类并仅设置其中一个类