如何使用 foreach 将值设置为数组
How to set values to array using foreach
如何使用循环向数组添加值。我已经通过硬编码值向数组添加了值,但我需要向 array.so 添加大量数据,这很难通过硬编码实现。我的这部分 JS 代码。
function BModel(checkInOrEdit) {
"use strict";
this.Number = ko.observable("");
this.Years = ko.observableArray(['', '2019', '2018', '2017', '2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000']);
}
BModel.prototype = {
addTo: function (isSupervised) {
"use strict";
this.fname($.trim(this.fname()));
this.lname($.trim(this.lname()));
},
AcDone: function (result, stat) {
"use strict";
var validationResults = JSON.parse(result.d);
var msgTitle = '';
}
}
$(document).ready(function () {
});
我需要为 Years
添加值,因为今年到 1900.how 我可以这样做吗?目前,我很难受。
this.Years = ko.observableArray(['', '2019', '2018', '2017', '2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000']);
你可以这样做:
function BModel(checkInOrEdit) {
"use strict";
this.Number = ko.observable("");
this.Years = ko.observableArray();
let lyears = [];
for (let i = 1900; i <= new Date().getFullYear(); i++) {
lyears.push(i);
}
this.Years(lyears); // see comments
}
这不是最优雅的方式,但如果您想使用循环,您可以这样做。
我建议先创建一个 returns 常规数组中一系列数字的助手。然后,您可以使用助手来初始化您的可观察数组。
推送到 foreach
中的可观察数组可能会有重绘 DOM 很多很多次的风险!
下面是一个 range
帮助程序(可以重构为更简洁)和一个可观察数组的示例:
function range(from, to) {
const dir = to > from ? 1 : -1
return Array.from(
Array(Math.abs(to - from) + 1),
(_, i) => from + dir * i
)
};
const years = ko.observableArray(
[""].concat(range(new Date().getFullYear(), 1900))
);
ko.applyBindings({ years });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: years">
<li data-bind="text: $data"></li>
</ul>
如何使用循环向数组添加值。我已经通过硬编码值向数组添加了值,但我需要向 array.so 添加大量数据,这很难通过硬编码实现。我的这部分 JS 代码。
function BModel(checkInOrEdit) {
"use strict";
this.Number = ko.observable("");
this.Years = ko.observableArray(['', '2019', '2018', '2017', '2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000']);
}
BModel.prototype = {
addTo: function (isSupervised) {
"use strict";
this.fname($.trim(this.fname()));
this.lname($.trim(this.lname()));
},
AcDone: function (result, stat) {
"use strict";
var validationResults = JSON.parse(result.d);
var msgTitle = '';
}
}
$(document).ready(function () {
});
我需要为 Years
添加值,因为今年到 1900.how 我可以这样做吗?目前,我很难受。
this.Years = ko.observableArray(['', '2019', '2018', '2017', '2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009', '2008', '2007', '2006', '2005', '2004', '2003', '2002', '2001', '2000']);
你可以这样做:
function BModel(checkInOrEdit) {
"use strict";
this.Number = ko.observable("");
this.Years = ko.observableArray();
let lyears = [];
for (let i = 1900; i <= new Date().getFullYear(); i++) {
lyears.push(i);
}
this.Years(lyears); // see comments
}
这不是最优雅的方式,但如果您想使用循环,您可以这样做。
我建议先创建一个 returns 常规数组中一系列数字的助手。然后,您可以使用助手来初始化您的可观察数组。
推送到 foreach
中的可观察数组可能会有重绘 DOM 很多很多次的风险!
下面是一个 range
帮助程序(可以重构为更简洁)和一个可观察数组的示例:
function range(from, to) {
const dir = to > from ? 1 : -1
return Array.from(
Array(Math.abs(to - from) + 1),
(_, i) => from + dir * i
)
};
const years = ko.observableArray(
[""].concat(range(new Date().getFullYear(), 1900))
);
ko.applyBindings({ years });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: years">
<li data-bind="text: $data"></li>
</ul>