动态绑定下拉列表

   在<select> data-bind的options选项如果绑定到ko.observableArray(),就可以动态新增选项效果,也就是可以利用其完成常见的级联效果的。

在这一篇文章中,我们用单页面完成无刷新的前台新增选项和使用MVC完成后台的动态添加2个例子。

范例一:

ViewModel中声明一个selectOptions属性为一个ko.observableArray()对象,并将其设为<select>的options下拉列表的数据源,再用两个<input>分別输入入Text及Value,输入內容点击新增按钮,此時就可看到下拉列表出現新增的选项內容。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>动态新增下拉列表选项</title>
<script src="Scripts/jquery-2.0.3.js"></script>
<script src="Scripts/knockout-2.3.0.js"></script>
<script type="text/javascript">
//创建一个View对象
function ViewModel() {
var self = this;
//使用observableArray进行绑定可以动态变更option选项
self.selectOptions = ko.observableArray([
{ "text": "请选择", "value": "0" }
]);
self.result = ko.observable("0");//添加result监控属性,初始绑定值为0
} $(function () {
var vm = new ViewModel();
ko.applyBindings(vm);
$("#btnAddItem").click(function () {
vm.selectOptions.push({
"text": $("#txtOptText").val(),
"value": $("#txtOptValue").val()
});
});
});
</script>
</head>
<body>
<div style=" background-color:#0094ff; width:180px; margin:100px auto auto auto;">
<select style="background-color:ActiveCaption;width:100px" data-bind="options: selectOptions, optionsText: 'text', optionsValue: 'value', value: result"></select>Value=<span data-bind=" text: result"></span>
<div> Text: <input id="txtOptText" value="选项1"/></div>
<div>Value: <input id="txtOptValue" value="1" /></div>
<input type="button" value="新增选项" id='btnAddItem' />
</div>
</body>
</html>

运行效果如下:

范例二:Mvc结合knockout.js完成级联下拉菜单

本例只是为了模拟,所以数据比较简陋,当然也可以从数据库中出数据来进行处理。

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-2.0.3.js"></script>
<script src="~/Scripts/knockout-2.3.0.debug.js"></script> </head>
<body>
<p>
<b style="color:#0094ff">选择学生:</b> @Html.DropDownList("Student", ViewBag.Students as SelectList, "请选择", new { onchange = "searchLover();" })
</p>
<p data-bind="visible: selectOptions().length > 0">
<b style="color:#0094ff">喜爱的事物:</b>
<select data-bind="options: selectOptions, optionsText: 'Name', optionsValue: 'Value', optionsCaption: '请选择'">
</select>
</p>
</body>
<script type="text/javascript">
function ViewModel() {
this.selectOptions = ko.observableArray([]);
}
var vm = new ViewModel();
ko.applyBindings(vm);
function searchLover() {
var id= $("#Student").val();
$.getJSON(
"@Url.Action("GetLovers")",
{ studentId: id},
function (data) {
vm.selectOptions(data);
});
}
</script>
</html>

-------------------------------------Controller中的数据模拟代码------------------------------------

using System.Collections.Generic;
using System.Web.Mvc; namespace KnockFunctionDemo.Controllers
{
public class HomeController : Controller
{
public ViewResult Index()
{
ViewBag.Students = new SelectList(GetStudentList(),"Id","Name");
return View();
}
private static List<Student> GetStudentList()
{
return new List<Student>
{
new Student{ Id=, Name="halower"},
new Student{ Id=, Name="rohelm"}
};
}
public JsonResult GetLovers(int studentId)
{
var list = new List<Lover>();
if (studentId == null)
list= null;
else if (studentId == )
{
list.Add(new Lover { Name = "编程", Value = "program" });
list.Add(new Lover { Name = "女朋友", Value = "GF" });
}
else
{
list.Add(new Lover { Name = "旅游", Value = "travel" });
list.Add(new Lover { Name = "家庭", Value = "family" });
}
return Json(list, JsonRequestBehavior.AllowGet);
} } public class Student
{
public int Id { get; set; }
public string Name { get; set; }
} public class Lover
{
public string Value { get; set; }
public string Name { get; set; }
}
}

运行效果:

备注:

本文版权归大家共用,不归本人所有,所有知识都来自于官网支持,书本,国内外论坛,大牛分享等等......后续将学习knockout.js的常用功能。

Knockout.js随手记(4)的更多相关文章

  1. Knockout.js随手记(2)

    计算属性 konckout.js的API文档,写的极为详细和生动,透过MVVM的运作原理,开发时只需专注于定义ViewModel逻辑,不需耗费心力处理TextBox.Select的onchange.o ...

  2. Knockout.js随手记(8)

    visible, disable, css绑定 这个例子非常简单,主要演示如何通过属性控制html元素的显示与否(visible),可用性(disable)以及根据属性添加相应的CSS样式. 先简单的 ...

  3. Knockout.js随手记(7)

    数组元素的新增/移除事件 前两篇博客已经很清楚的知道knockout.js通过observableArray()数组元素增减,可以实时的反映在UI上.当然我们想在数组增加或移除元素时加上自定义逻辑就好 ...

  4. Knockout.js随手记(6)

    实时反映对象属性的变化 在前一篇博客中我们使用了如下代码去新增user对象,即push方法: $("#btnAddUser").click(function () { vm.use ...

  5. Knockout.js随手记(5)

    以列表方式呈现数据  处理以数组形式储存的多条数据,要先认识foreach.在ViewModel定义一个JavaScript Array或是ko.observableArray() (observab ...

  6. Knockout.js随手记(3)

    下拉菜单 <select>也是网页设计重要的一环,knockout.js(以下简称KO)也有不错的支持.针对<select>,在data-bind除了用value可对应下拉菜单 ...

  7. Knockout.js随手记(1)

    新的开始,knockout.js 1.首先去http://knockoutjs.com/index.html下载knockout.js,最新的版本是2.3 2.知道什么是Knockout?它是个Jav ...

  8. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  9. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

随机推荐

  1. import第三方库的头文件找不到的错误

    问题描述:使用cocoapods导入了第三方库,import该第三方库的某个头文件,然后编译报错找不到这个头文件内所import的头文件. 产生原因:我们需要配置头文件的搜索路径,告诉系统头文件的路径 ...

  2. 【bzoj3124】 Sdoi2013—直径

    http://www.lydsy.com/JudgeOnline/problem.php?id=3124 (题目链接) 题意 求树的直径以及直径的交. Solution 我的想法超麻烦,经供参考..思 ...

  3. python 批量扫描mongodb 未授权访问脚本

    需要 pymongo库easy_install pymongo脚本: import socket import sys import pymongo ipcons = [] def Scanner(i ...

  4. js 中的基本类型和引用类型的区别

    js中的基本类型赋值之后,只有值相等的时候,二者才会相等,例如 var  a='123'; var b=a; console.log(a===b); 返回的是true ,说明他们是相等的, 此时改变a ...

  5. 【原】十张javascript思维导图

    下面附上十张javascript思维导图,如果把里面的内容全部掌握,那就是高手了.思维导图提供给我们一个整体的知识体系,也可以说是一种工具,废话不多说,上图: 1.javascript数据类型 2.j ...

  6. 学习.Net的经典网站

    学习.Net的经典网站 收藏 还不错推荐给大家 原文-- 名称:快速入门 地址:http://chs.gotdotnet.com/quickstart/ 描述:本站点是微软.NET技术的快速入门网站, ...

  7. Node.js入门笔记(4):文件系统(fs)

    文件系统(FileSystem) 文件系统模块 对于文件无外乎创建修改添加. File System - 文件系统模块 - require('fs') fs模块是核心模块,需要使用require导入后 ...

  8. storyboard传值方式

    通过segue传值 在storyboard设置segue的Identifier   segue是连接两个视图控制器交互的线 sender是触发这个方法执行的对象,比如是单击tableView上的cel ...

  9. AutofacContainer

    /// <summary> /// Autofac容器 /// </summary> public class AutofacContainer { public static ...

  10. Solr的主界面加登录权限

    如题:效果如下图zu 只需两步: 1.tomcat-users.xml   下添加 <user username="admin" password="new-pas ...