Knockout获取数组元素索引的2种方法,在MVC中实现

简介: 原文:Knockout获取数组元素索引的2种方法,在MVC中实现 在遍历数组、集合的时候,通常要获取元素的索引,本篇体验使用Knockout获取索引的2种方法。   假设有这样的一个模型: namespace UseIndex.

原文:Knockout获取数组元素索引的2种方法,在MVC中实现

在遍历数组、集合的时候,通常要获取元素的索引,本篇体验使用Knockout获取索引的2种方法。

 

假设有这样的一个模型:

namespace UseIndex.Models
{
    public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

 

在HomeController中,先模拟一个Student的集合,在投影出Name属性的集合,最后以Json返回给前台视图。

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using UseIndex.Models;

namespace UseIndex.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public JsonResult GetStudentNames() 
        {
            var students = new List<Student>()
            {
                new Student(){Id = 1, Name = "小明"},
                new Student(){Id = 2, Name = "啸天"}
            };

            var names = from student in students
                select new {student.Name};
            return Json(names, JsonRequestBehavior.AllowGet);
        }

    }
}

 

在Home/Index.cshtml中:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/knockout-2.2.0.js"></script>
    <script type="text/javascript">
        $(function() {
            var vm = new ViewModel();
            ko.applyBindings(vm);
            vm.init();
        });

        function ViewModel() {
            var self = this;

            self.items = ko.observableArray([]);

            self.showItemIndex = function(item, event) {
                var context = ko.contextFor(event.target); //获取绑定元素的上下文;event.target绑定View Model的DOM元素
                var index = context.$index();
                alert("当前索引是:" + index);
            };

            self.init = function() {
                $.getJSON('@Url.Action("GetStudentNames","Home")', function(data) {
                    var arr = [];
                    for (var i = 0; i < data.length; i++) {
                        arr[i] = data[i].Name;
                    }
                    self.items(arr);
                });
            };
        }
    </script>
    <style type="text/css">
        //样式略
    </style>
</head>
<body>
    <div>
        <table>
            <thead>
                <tr>
                    <th>索引</th>
                    <th>编号</th>
                    <th>名称</th>
                    <th>在View Model中的索引</th>
                </tr>
            </thead>
            <tbody data-bind="foreach: items">
                <tr>
                    <td data-bind="text: $index"></td>
                    <td data-bind="text: $index() + 1"></td>
                    <td data-bind="text: $data"></td>
                    <td><a href="#" data-bind="click: $root.showItemIndex">点击显示索引</a></td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
</html>

以上,$data是指当前集合元素。$root是指根context中的ViewModel。

 

运行:
1

 

总结

获取集合或数组元素的索引序号有2种方式:
1、通过data-bind="text: $index"或data-bind="text: $index() + 1"
2、在View Model中通过方法来获得:先获取到上下文,再context.$index()

目录
相关文章
|
3月前
|
JavaScript 前端开发 Java
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 以及 Ext JS。
MooTools、Backbone、Sammy、Cappuccino、Knockout、JavaScript MVC、Google Web Toolkit、Google Closure、Ember、Batman 和 Ext JS 都是 JavaScript 框架,用于开发 Web 应用程序。它们分别提供了不同的功能和特性,以帮助开发者更高效地构建和维护 Web 应用程序。
20 2
|
前端开发 Java 程序员
Spring MVC 框架搭建配置方法及详解
Spring MVC 框架搭建配置方法及详解
Spring MVC 框架搭建配置方法及详解
|
前端开发 Java Spring
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(下)
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(下)
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(下)
|
前端开发 Java Apache
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(中)
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(中)
|
前端开发 Java Spring
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(上)
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(上)
HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】(上)
|
前端开发 Java Spring
Spring MVC的Controller接受请求方式以及编写请求处理方法
标签中的内容:创建register.jsp代码: 复制代码<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 注册画面<form action="${pageContext.
657 0
|
前端开发 C#
C# MVC的一种高效分页的html方法
首先创建一个html的扩展方法,这个方法是万能的,可以直接拿到您的项目中使用:   //主要就是输出分页的超级链接的标签 //自定义分页Helper扩展 public static HtmlString ShowPageNavigate(this Htm...
1628 0
|
前端开发 关系型数据库 Java
bboss mvc 控制器方法参数绑定技巧-Map类型参数绑定介绍
本文介绍bboss mvc 控制器方法参数绑定技巧-Map类型参数绑定的使用方法,切入正题。 1、概述 Map类型参数绑定有两种方式: 方式一 Map方式,直接将Request对象中的参数转储到Map对象中 方式二 Map方式,这种方式用来将多条记录转换为Bean类型值对象,然后根据@MapKey中指定记录字段的值作为Map的key值,Bean对象作为value,形成一个Map对象作为控制器方法参数。
824 0
|
前端开发 应用服务中间件 Java
bbossgroups mvc demo构建部署方法
bbossgroups mvc demo部署方法: 1.环境准备 jdk 1.6或以上 tomcat 7或以上版本 2.下载最新的源码包 bboss-site(定期发布) 3.下载后解压,进入bboss-site工程目录,执行build.
697 0