- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
复选框和单选按钮的数据结构相同。选中复选框时,它们会返回正确的 bool 值(“选择的”变量)。
但是,当我选中单选按钮时,“已选择”总是更改为“值”(整数)。
即使'chosen' == true,单选按钮也不会在开始时被“选中”
Javascript:
function attributeValueViewModel(data) {
var self = this;
self.id = ko.observable(data.id);
self.attributeID = ko.observable(data.attributeID);
self.value = ko.observable(data.value);
self.chosen = ko.observable(data.chosen);
}
function viewModel() {
var self = this;
self.attributeValues1 = ko.observableArray([]);
self.attributeValues2 = ko.observableArray([]);
self.addToList = function(data) {
ko.utils.arrayForEach(data, function(item) {
self.attributeValues1.push(new attributeValueViewModel(item));
self.attributeValues2.push(new attributeValueViewModel(item));
});
};
}
var arr = [
{
"id": 55,
"attributeID": 28,
"value": "Yes",
"chosen": false,
},
{
"id": 56,
"attributeID": 28,
"value": "No",
"chosen": true,
},
{
"id": 62,
"attributeID": 28,
"value": "Maybe",
"chosen": false,
}
];
var vm = new viewModel();
ko.applyBindings(vm);
vm.addToList(arr);
HTML
<b>Checkbox:</b>
<div id="test1">
<span data-bind="foreach: attributeValues1()">
<input type="checkbox" data-bind="value: id(), checked: chosen, attr: { name: 'test1' }" />
<span data-bind="text: value()"></span>
<span data-bind="text: chosen()"></span>
</span>
</div>
<br />
<b>Radio:</b>
<div id="test2">
<span data-bind="foreach: attributeValues2()">
<input type="radio" data-bind="value: id(), checked: chosen, attr: { name: 'test2' }" />
<span data-bind="text: value()"></span>
<span data-bind="text: chosen()"></span>
</span>
</div>
这是我的 fiddle : http://jsfiddle.net/SN7Vn/1/
您能否解释一下这种行为以及为什么单选按钮不更新 bool 值(就像复选框那样)?
最佳答案
复选框和单选按钮的行为各不相同。当单个 observable 绑定(bind)到 checked
绑定(bind)(而不是数组)时,它们的行为特别不同。
对于复选框,它始终是一个 bool 值,表示它是否被选中。简单的。如果是数组,值
将从数组中添加/删除。
但是对于单选按钮,它将是分配给单选按钮的值。对于单个 observable,它只会被认为检查了它所绑定(bind)的值是否等于该值。在您的情况下,您的值绑定(bind)到 id
因此只有当 chosen
值等于相应的 id 时才会响应。对于数组,它会将值添加/删除到数组。
因为没有其他东西改变相应属性的 chosen
的值,所以它保持不变
我调整了您的示例以演示该值如何影响选中状态。 Updated fiddle
都拼出来了in the documentation , 仔细看看。
如果您希望它的工作方式类似于复选框的工作方式,则需要做一些工作才能使其正确。由于绑定(bind)的工作方式以及它们的顺序依赖性如何导致问题,我有这段代码感觉有点脆弱。您可以试试这个,我只是不确定它有多稳健。
为此,您需要一个可观察对象来跟踪实际选择的单选按钮的实际变化。然后您可以订阅该 observable 的更改以更新您选择的 observable。
ko.bindingHandlers.radiochecked = {
init: function (element, valueAccessor, allBindingsAccessor) {
// the checked binding depends on the element having an initial value
// we need to allow bindings that potentially set it to be applied first
setTimeout(function () {
var options = ko.utils.unwrapObservable(valueAccessor());
if (options.checked()) {
options.selected(element.value);
}
options.selected.subscribe(function (newValue) {
options.checked(newValue === element.value);
});
ko.applyBindingsToNode(element, { checked: options.selected });
}, 0);
}
};
然后将其绑定(bind)到您的单选按钮:
<input type="radio" data-bind="
value: id,
radiochecked: {
'checked': chosen,
'selected': $root.attributeValues2.selected
},
attr: { name: 'test2' }" />
关于knockout.js - KnockoutJS 单选按钮不像复选框那样改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425779/
所以我有这个 javascript 片段,它有两个按钮可以进入全屏,一个按钮可以退出全屏。我想做到这一点,如果我不在全屏模式下,按钮会显示转到全屏模式,而当我处于全屏模式时,按钮会显示退出全屏模式..
我在自定义控件中添加了一个新属性作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用我的自定义控件后,我在属性网格中看到一个省略号 (…) 按钮,如字体属性的“…”按钮
我在自定义控件中添加了一个新属性作为可扩展属性,例如属性网格中的字体属性。在 Windows 窗体应用程序项目中使用我的自定义控件后,我在属性网格中看到一个省略号 (…) 按钮,如字体属性的“…”按钮
我尝试将 Twitter 上的“Tweet Me”按钮 ( http://twitter.com/goodies/tweetbutton ) 添加到我的网站。然而,每当按下按钮时,我都会收到此 Jav
我试图在我的文本区域中获取一个按钮值,如果我使用 则工作正常但如果我使用那么它就不起作用了。你能找出问题所在吗? HTML 1 2 3 4 JavaScript $(document).read
我的 C# Winform 面板中有一堆文本框。每行文本框的命名如下: tb1 tbNickName1 comboBox1 tb2 tbNickName2 comboBox2 tb3 tbNickNa
我有一个表单,其中过滤器下方有按钮(应用过滤器和清除过滤器),我试图在单击“应用”按钮时显示“清除”,并在单击“清除”按钮时隐藏“清除”按钮。 下面的代码(如果我的表有的话):
excel 按钮正在工作,但是当我添加 pdf 按钮时,它添加仅显示 pdf 按钮 excel 按钮在 pdf 按钮添加后隐藏 $(document).ready(function() { $
我想创建一个 div 作为标题并分成 3 列,并按以下顺序在其中放置 2 个按钮和一个标题:Button1(左位) Title(居中) Button2(右位) 这是我为这个 div 编写的代码:
仅当选中所有框时才应禁用“允许”按钮。我该怎么做?我已经完成了 HTML 部分,如下所示。如何执行其中的逻辑部分?即使未选中一个复选框,也应禁用“允许”按钮
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
如您所知,您可以使用 2 种方法在 HTML5 中呈现按钮: 使用 void 元素 或 如果您需要内容,请使用 元素(不是空元素)。 在JSF2中,有2种方式生成按钮;与UICommand或 UIOu
我尝试根据表单元素的更改禁用/启用保存按钮。但是,当通过弹出按钮选择更改隐藏输入字段值时,保存按钮不受影响。 下面是我的代码。我正在尝试序列化旧的表单值并与更改后的表单值进行比较。但我猜隐藏的字段值无
我有用于在消息(电子邮件、短信)上输入内容的 EditText。我希望在单击 ActionDone 按钮时立即发布消息。我为此使用以下代码: message.setOnEditorActionList
我的 Android 应用程序中有一堆 EditText,每个都将 InputMethod 设置为 numberSigned。我的目标设备没有硬件键盘,而是使用软件键盘输入数字。 Android 将输
我无法以编程方式隐藏弧形菜单中的 fab 按钮。我正在使用https://github.com/saurabharora90/MaterialArcMenu在我的代码中。如何在Java中以编程方式隐藏
我已经看到这在其他类型的对话框窗口中是可能的,例如“showConfirmDialog”,其中可以指定按钮的数量及其名称;但是使用“showInputDialog”时是否可以实现相同的功能?我似乎无法
相同的按钮用于激活和停用。第一次,当代码运行按钮单击并成功“停用”时。但第二次,代码无法找到该元素。第一个案例按钮位于第二个“a”标签中,然后停用第一个“a”标签中的按钮。 案例1: Edit
是否可以将按钮的 onclick 操作设置为 JavaScript 变量?这个想法是我们用 JavaScript 控制一个表。每当点击该表的一行时,我们就会更新一个 JavaScript 变量。该 v
我想创建一个按钮,它包含左侧的文本和右侧的复选框(或任何其他组件)。我怎样才能做到这一点? 我发现我可以制作自己的 View extends Button,但是如果可以的话我应该如何实现 onDraw
我是一名优秀的程序员,十分优秀!