У меня есть целочисленное наблюдаемое значение, pages, и я хочу, чтобы цикл до значения страниц в html, например.
pages = ko.observable(3)
производит
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
Есть ли привязка, подходящая для этого?
У меня есть целочисленное наблюдаемое значение, pages, и я хочу, чтобы цикл до значения страниц в html, например.
pages = ko.observable(3)
производит
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
Есть ли привязка, подходящая для этого?
Вы можете написать примерно следующее:
<ul data-bind="foreach: new Array(pages())">
<li data-bind='text: $index()+1'></li>
</ul>
Здесь работает скрипка: http://jsfiddle.net/L8Uy5/
Ответ Артема Вышнякова - это отличный быстрый способ добиться этого в представлении без изменения модели представления. Однако, если вы планируете быстро развернуть установку или просто не любите иметь (что, возможно, логически проверяемая логика) new Array(pages()), на ваш взгляд, здесь альтернативное решение. Еще одно преимущество может заключаться в том, что вы можете также инкапсулировать бит $index + 1:
function ViewModel() {
var self = this;
self.pages = ko.observable(3);
self.pageArray = ko.computed(function() {
var list = [];
var length = parseInt(self.pages(), 10); // the <input> makes `pages` a string!
for (var i = 1; i <= length; i++) {
list.push(i);
}
return list;
});
}
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<input data-bind="textInput: pages" type="number">
<ul data-bind="foreach: pageArray">
<li data-bind="text: $data"></li>
</ul> он не работает в поле обновления
Вы можете написать примерно следующее:
Здесь работает скрипка: http://jsfiddle.net/L8Uy5/
Эта работа лучше https://jsfiddle.net/L8Uy5/54/
function ViewModel(){
var self = this;
self.pages = ko.observable(3);
self.virtual_elements = ko.computed(function(){
var arr = [];
for (var i=1; i<=self.pages(); i++) {
arr.push('some');
}
return arr;
});
}
ko.applyBindings(new ViewModel());
<input data-bind="value: pages"/>
<ul data-bind="foreach: virtual_elements">
<li data-bind='text: $index()+1'></li>
</ul>