创建一个数组,并显示KnockoutJs中所选选项确定的每个项目的次数
Create an array and show each item number of times determined by selected option in KnockoutJs
有一个下拉列表:
<div class="divInfoMargin">
There are
<select data-bind="options: numberOfChildren" class="mscSelect"></select>
</div>
我需要在上面显示下面选择的次数:
<div data-bind="foreach: children">
<div>
Name: <input data-bind="value: name" type="text" />
Date Of Birth <input type="text" data-bind="value: dob" class="datepicker" />
Residence :
<select data-bind="value: residence" name="residence" id="residence">
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
</select>
</div>
</div>
淘汰视图模型和一些粗略的想法:
function Child(name, dob) {
var self = this;
self.name = name;
self.dob = dob;
}
function AppViewModel() {
var self = this;
self.numberOfChildren = ko.observableArray(['1', '2', '3', '4', '5', '6']);
//this array needs to be added to:
self.children = ko.observableArray([]);
//self.addChild = function() {
// self.children.push(new Child(""));
//};
//This is not working code:
self.allChildren = ko.computed(function () {
var total = 0;
for (var i = 0; i < self.numberOfChildren().value; i++) {
self.children.push(new Child(""));
}
});
}
ko.applyBindings(new AppViewModel());
我对KO完全陌生,也很困惑。这是JSFiddle
您的代码有两个主要问题:
1) 您的选择需要一个值绑定来保存所选的值;你不能做self.numberOfChildren().value
,你需要一个可观察的视图模型来保持这个值。(因此,您的数据绑定应该类似于<select data-bind="options: numberOfChildren, value: currentNumberOfChildren">
2) 与其尝试使用computed来填充可观察数组,您应该只让computed返回您想要的数组,或者让一个带有填充它的订阅的可观察数组。
返回数组的计算:
self.children = ko.computed(function () {
var children = [];
for (var i = 0; i < self.currentNumberOfChildren(); i++) {
children.push(new Child(""));
}
return children;
});
订阅的可观测阵列:
self.children = ko.observableArray([]);
//Update self.children wehenver currentNumberOfChildren changes
self. currentNumberOfChildren.subscribe(function () {
var children = [];
for (var i = 0; i < self.currentNumberOfChildren(); i++) {
children.push(new Child(""));
}
self.children(children);
});
第一个更简单,但它不是一个可观察的数组,因此没有像self.children.push
这样的辅助方法(事实上,它是只读的),但我个人会走第一条路。
(工作JSFiddle)
我稍微修改了您的代码,您需要在select中设置一个选定的值,然后在计算中使用它,不过您的想法是正确的。
HTML
<select data-bind="options: numberOfChildren, value: selectedNumberOfChildren" class="mscSelect"></select>
JavaScript
self.selectedNumberOfChildren = ko.observable();
self.allChildren = ko.computed(function () {
var total = 0;
self.children.removeAll();
for (var i = 0; i < self.selectedNumberOfChildren(); i++) {
self.children.push(new Child(""));
}
});
http://jsfiddle.net/2prhq5v2/5/
相关文章:
- 在BootStrap菜单栏中为所选项目设置背景,类似于BootStrap中的父导航选项
- jQuery:根据select选项中的每页项目进行分页
- 更新:仅根据单选按钮和所选选项选择特定项目
- HTML选择,在DOM中选择了正确的选项,但在firefox中显示了错误的项目
- 如何在angular js中的select选项中获取所选项目id
- 如何将一个表单中的项目添加到 Rails 中另一个表单的下拉选项
- 当表单控件选项具有多个参数时,如何在组合框中填充所选项目
- 通过单击按钮将选项卡(项目)添加到选项卡面板,扩展
- 如何将此选项添加到此图像选取器项目中
- 更新“项目”选项以进行排序
- 在呈现项目后,挖空选择绑定回调的选项
- 在单击选项卡式项目时隐藏和创建另一个对象 - HTML CSS
- 使用表排序器筛选所选选项列表中的选定项目
- jQuery 在选项列表中重新填充所选项目
- 将项目插入活动选项卡窗格
- Microsoft Dynamics Online:将所有选项集项目复制到多行文本字段(使用 JavaScript)
- 在选择选项中选择多个项目,而不使用“Ctrl”键
- jQuery Mobile,在选项列表中选择所有项目
- 从下拉列表中选择项目后,显示新选项并显示文本
- 如何在浏览器窗口/选项卡关闭时删除本地存储项目