(四 )Knockout - ViewModel 的使用3 - 对象属性变化的实时更新

本文通过两个实例展示了Knockout.js的基本用法,包括如何使用ko.observableArray()和ko.observable()来实现数据绑定,以及如何利用这些绑定来更新UI元素的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ko.observableArray()就可以自动检测属性,其实他只是监控对象,而不是对象中的属性

使用ko.observable()进行处理

DEMO1

实时更新属性

//定义user数据对象
var UserViewModel = function(id,name,score) {
    var me = this;
    me.id = id;
    me.name =ko.observable(name);  // 监控属性
    me.score =ko.observable(score);
}
//定义ViewModel
var ViewModel = function() {
    var me = this;
    me.users = ko.observableArray();//添加动态监视数组对象
        me.removeUser = function (user) {
        me.users.remove(user);
    }
    me.totalscore = ko.computed(function () {
        var total = 0;
        $.each(me.users(), function (i, u) {
            total += u.score();
        })
        return total;
    });
};
$(function () {
    var vm = new ViewModel();
    //预先添加一些数据
    vm.users.push(new UserViewModel("d1", "rohelm", 121));
    vm.users.push(new UserViewModel("d2", "walker", 125));
    $("#btnAddUser").click(function () { 
    vm.users.push(new UserViewModel(
        $("#u_id").val(),
        $("#u_name").val(),
        parseInt($("#u_score").val())));
    });
    $("#btnUpdateScore").click(function () {
        vm.users()[vm.users().length-1].score(125).name("HelloWorld!");
    });
    ko.applyBindings(vm);
});
<section style="margin:250px">
    <section>
      ID<input type="text" id="u_id" style="width:30px">
      Name<input type="text" id="u_name" style="width:30px">
      Score<input type="text" id="u_score" style="width:30px"><br/>
      <input  value="Add" id="btnAddUser" type="button" style="width:200px; background-color:#ff6a00;"/><br/><span data-bind="text: users().length"></span> 条--------------合计
       <span data-bind="text: totalscore"></span></section>
    <section>
    <table>
         <thead>
             <tr><th>ID</th><th>Name</th><th>Score </th><th>Option</th></tr>
         </thead>
        <tbody  data-bind="foreach: users">
             <tr>
                <td><span data-bind="text: id"></span></td>
                <td><span data-bind="text: name"></span></td>
                <td><span data-bind="text: score"></span></td>
                 <td><a href='#' data-bind="click: $root.removeUser">Remove</a></td>
             </tr>
        </tbody>
     </table>
         <input  value="Update测试" id="btnUpdateScore" type="button" style="width:200px; background-color:#ff6a00;"/><br/>
    </section>
</section>

 

DEMO2

通过属性控制html元素的显示、隐藏

var ViewModel = function() {
    var me = this;
    me.isVip = ko.observable(false);  // 监控属性
    me.username = ko.observable("walker_@@");
}
$(function () {
    ko.applyBindings(new ViewModel());
});
<p>
    <input id="isvip" type='checkbox' data-bind="checked: isVip" /><label for="isvip">是否是会员</label>
</p>
<p>
    你的用户名是:
    <input type='text' data-bind="value: username, enable: isVip,css: {account: username().indexOf('G')>-1}"/>
    <span data-bind="visible: isVip">尊贵的会员欢迎你访问!</span>
</p>

解析:

view属性绑定,data-bind="checked:true/false",data-bind="visible:true/false"

转载于:https://www.cnblogs.com/huair_12/p/4233754.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值