Konckout第二个实例:数组数据类型双向绑定

自定义js做法:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style>
            #content1{padding: 20px;}
        </style>
    </head>
    <body>
        <div id="content1">
            <select id="userNameList">
            </select>
            <b id="selectValue"></b>
        </div>

        <script type="text/javascript" src="js/jquery.js"></script>
        <script type="text/javascript" src="js/knockout30.js"></script>
        <script>
            function RenderSelectOptions(datas,selectNode){
                var optionString = "";
                for(var i in datas){
                    optionString += "<option value="+datas[i]+">"+datas[i]+"</option>";
                }
                selectNode.html(optionString);
            }
            $(function(){
                var userName = [‘党---‘,‘兴---‘,‘明---‘];
                var userNameList = $(‘#userNameList‘);

                RenderSelectOptions(userName,userNameList);

                $(‘#userNameList‘).change(function(){
                    var selectValue = $(‘#selectValue‘);
                    selectValue.html(userNameList.val());
                });
            });
        </script>
    </body>
</html>

knockout方法

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style>
            #content1{padding: 20px;}
        </style>
    </head>
    <body>
        <div id="content1">
            <select id="userNameList" data-bind="options:userNames,selectedOptions:selectedUserName">
            </select>
            <b id="selectValue" data-bind="html:selectedUserName"></b>
        </div>

        <script src="js/jquery.js"></script>
        <script src="js/knockout30.js"></script>
        <script>
            $(function(){
                var ViewModel = function(){
                    var self = this;
                    self.userNames = ko.observable([‘aaa‘,‘bbb‘,‘ccc‘]);
                    self.selectedUserName = ko.observable("");
                }
                var currentViewModel = new ViewModel();
                ko.applyBindings(currentViewModel);
            });
        </script>
    </body>
</html>

 但:这样option上value和显示的文本都是数组里的值,当需要两个不一样时,该肿么办呢:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style>
            #content1{padding: 20px;}
        </style>
    </head>
    <body>
        <div id="content1">
            <select id="userNameList" data-bind="options:userNames,optionsText:‘Key‘,optionsValue:‘Value‘,selectedOptions:selectedUserName">
            </select>
            <b id="selectValue" data-bind="html:selectedUserName"></b>
        </div>

        <script src="js/jquery.js"></script>
        <script src="js/knockout30.js"></script>
        <script>
            $(function(){
                var ViewModel = function(){
                    var self = this;
                    //self.userNames = ko.observable([‘aaa‘,‘bbb‘,‘ccc‘]);
                    self.userNames = ko.observable([{Key:‘tom‘,Value:‘1‘},{Key:‘jerry‘,Value:‘2‘},{Key:‘dang‘,Value:‘3‘}]);
                    self.selectedUserName = ko.observable();
                }
                var currentViewModel = new ViewModel();
                ko.applyBindings(currentViewModel);
            });
        </script>
    </body>
</html>
时间: 2024-07-29 05:50:50

Konckout第二个实例:数组数据类型双向绑定的相关文章

C# Wpf双向绑定实例

Wpf中双向绑定处理需要两处 实例1: 1.前台Xaml中属性Binding 时Model指定 TwoWay <Grid> <Ellipse x:Name="ellipse" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="{Binding Path=Number,Mode=TwoWay}" Margin="50,55,0,0" St

第二章 Vue快速入门--13 讲解v-model实现表单元素的数据双向绑定

1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width,initial-scale=1.0"> 7 <title>Document</title> 8

Vue数组双向绑定内幕

在Vue使用期间,我们经常会遇到对于数组的操作,但是Vue中如何实现数组双向绑定的呢,在这篇PPT中,首先回顾Vue双向绑定原理,之后再去研究Vue对于数组的特殊处理. ppt:Vue数组双向绑定内幕 参考:https://ustbhuangyi.github.io/vue-analysis/ 原文地址:https://www.cnblogs.com/MarphyDemon/p/11487764.html

实现双向绑定Proxy比defineproperty优劣如何?

前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向绑定 模板引擎: 如何解析模板 渲染: Vue如何将监听到的数据变化和解析后的HTML进行渲染 可以实现双向绑定的方法有很多,KnockoutJS基于观察者模式的双向绑定,Ember基于数据模型的双向绑定,Angular基于脏检查的双向绑定,本篇文章我们重点讲面试中常见的基于数据劫持的双向绑定. 常见的

我的angularjs源码学习之旅3——脏检测与数据双向绑定

前言 为了后面描述方便,我们将保存模块的对象modules叫做模块缓存.我们跟踪的例子如下 <div ng-app="myApp" ng-controller='myCtrl'> <input type="text" ng-model='name'/> <span style='width: 100px;height: 20px; margin-left: 300px;'>{{name}}</span> </di

angularjs培训之重新理解双向绑定和事件详解

双向绑定是angularjs亮点之一,在前面的<angularjs培训之helloworld>篇中大概介绍了下双向绑定,现在我们"旧事重提",先看下下面的代码片段: view中:  <input type='button' ng-click="set()" value="set Value">  <input type="text" ng-model='userName2'> control

vue中如何实现数据的双向绑定

vue中如何实现数据的双向绑定 实现视图变化数据跟着变:分两步,上面get中的为第二步(即再次读取的时候会调用get方法得到之前设置的值,以此来实现动态改变) 由于直接写obj.name = this.value;会导致循环调用set方法,所以要借助中间对象的形式把值赋给中间对象,获取obj.name的时候我们获取中间对象的最新值即可 let obj = {name:'zhufeng',age:9};//数据 let temp = {name:"lily"};//借助中间对象 let

一、vue的数据双向绑定的实现

响应式系统 一.概述 Vue通过设定对象属性的 setter/getter 方法来监听数据的变化,通过getter进行依赖收集,而每个setter方法就是一个观察者,在数据变更的时候通知订阅者更新视图. 双向数据绑定,简单点来说分为三个部分: 1.Observer.这里的主要工作是递归地监听对象上的所有属性,在属性值改变的时候,触发相应的watcher. 2.Watcher.观察者,当监听的数据值修改时,执行响应的回调函数(Vue里面的更新模板内容). 3.Dep.连接Observer和Watc

由自定义事件到双向绑定

前言 除了大家经常提到的自定义事件之外,浏览器本身也支持我们自定义事件,我们常说的自定义事件一般也都是用于项目中的一些通知机制,例如双向绑定.一起看一下如何实现自定义事件,以及基于观察者模式的双向绑定的基本原理. 浏览器自定义事件 定义 除了我们常见的click,touch等事件之外,浏览器支持我们定义和分发自定义事件. 创建也十分简单: //创建名为test的自定义事件 var event = new Event('test') //如果是需要更多参数可以这样 var event = new