javascript - 如何获取 knockoutjs 可观察数组的下一个元素?

标签 javascript jquery arrays knockout.js observable

我需要为可观察数组的数组元素实现 2 个按钮(下一个、上一个)。是否有任何默认函数或任何方式在数组元素之间导航?

例如:

var mainArray = ko.observableArray([{id:1,name:'one'},{id:2,name:'two'}]);

当我点击下一步按钮时,它应该返回下一个对象(比如 ko.utils.arrayFirst() 返回给定的对象)

有什么帮助吗?

最佳答案

不,没有“默认”方式来做到这一点。

RoyJ 的评论是关于如何自己做的。让我把它变成一个工作示例:

var ViewModel = function() {
  var self = this;
  
  self.mainArray = ko.observableArray([{id:1,name:'one'},{id:2,name:'two'}]);
  
  var _currentItemIndex = ko.observable(0);
  
  function navigate(nrOfSpots) {
    if (_currentItemIndex() + nrOfSpots >= self.mainArray().length) { return; }
    if (_currentItemIndex() + nrOfSpots < 0) { return; }
    _currentItemIndex(_currentItemIndex() + nrOfSpots);
  }
  
  self.next = function() { navigate(1); };
  self.prev = function() { navigate(-1); };
  
  self.currentItem = ko.computed(function() {
    return self.mainArray()[_currentItemIndex()];
  });
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

Current Item: 
<i data-bind="text: currentItem().name"></i>
<br />
<button data-bind="click: prev">Previous</button>
<button data-bind="click: next">Next</button>

它利用:

  • 一个带有指示当前索引的可观察变量的私有(private)变量;
  • prevnext 两个函数来更改该索引(到目前为止有效/可能);
  • A 计算返回该索引处的当前项。

View (html) 仅用于演示目的。

关于javascript - 如何获取 knockoutjs 可观察数组的下一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30867450/

相关文章:

javascript - AJAX 调用在使用 Backbone.js 完成之前被中止

c# - 将托管数组复制到非托管固定大小数组或从非托管固定大小数组复制

php - 使用 SQL 和 Codeigniter 返回 4 维数组

arrays - 将 PostgreSQL 数组数据类型解析为数组到 perl

javascript - 将变量与按钮绑定(bind)的更有效方法?

javascript - href 链接在 Accordion 内部不起作用,似乎 Javascript 覆盖了点击功能

javascript - 如何在单击时打开 Ionic Modal?

javascript - jQuery |选择超链接的元素文本 | text() 或 html() 方法似乎不起作用

jquery - 表分页不随表排序器一起提供

javascript - Bootstrap 模式没有响应