Backbone系列:Model的学习

Model的学习

本章通过完成单向数据绑定的demo,以此学习Backbone的Model模块
在线demo: 单向数据绑定

设置属性值

我们可以在构建Model类的时候,定义其属性值。
var Echo = Backbone.Model.extend({
    defaults: {
        word: '请输入'
    },
    initialize: function () {
        var that = this;
        alert(that.get('word')); 
    }
});
var echo = new Echo();

另外,我们也可以在实例化Model时,传入对象,对象中的属性会成为Model的属性
var Echo = Backbone.Model.extend({
    initialize: function () {
        var that = this;
        alert(that.get('word')); 
    }
});
var echo = new Echo({word: '请输入'});

Model提供get和set方法,我们能使用他们获取和设置Model的属性值
var Echo = Backbone.Model.extend({
    defaults: {
        word: '请输入'
    },
    initialize: function () {
        var that = this;
        // 通过set可以改变一个或多个model属性的值
        that.set('word', '通过set改变model的属性值');
        // 通过get能获取属性的值
        alert(that.get('word'));
    }
});
var echo = new Echo();

监听Model的改变

Backbone中所有的属性都绑定了监听,用来监测他们的变化。所以我们可以在initialize里绑定对应的处理函数,来监听的"word"属性的改变
var Echo = Backbone.Model.extend({
    defaults: {
        word: '请输入'
    },
    initialize: function () {
        var that = this;
        // 当name属性被更新时触发
        // API为"change:[attribute]" (model, value, options)
        that.on('change:word', function(model) {
            alert('属性word被改变');
        })
    }
});
var echo = new Echo();
echo.set('word', '哈哈');

所以我们定义一个输入框<input>,一个显示输入框内容的<p>
<input class="input" type="text">
<p>你输入的是:<span class="type"></span></p>

然后监听输入框的keyup事件,每次输入改变时同步改变Model的属性。而Model的属性的改变会触发显示内容的改变,最终实现改变输入框内容,显示的内容同步改变的单向数据绑定
var Echo = Backbone.Model.extend({
    defaults: {
        word: '请输入'
    },
    initialize: function () {
        var that = this,
            word = that.get('word');
        $('.input').val(word);
        $('.type').text(word);
        // 当name属性被更新时触发
        // API为"change:[attribute]" (model, value, options)
        that.on('change:word', function(model, value) {
            $('.type').text(value);
        })
    }
});
var echo = new Echo();
// 为输入框绑定keyup事件,每次输入时,改变echo属性word的值
$('.input').on('keyup', function(e) {
    echo.set('word', $(this).val());
});

与View配合

进一步,我们可以用View生成html,配合Model。

首先把原有的输入框<input>元素和展现的<p>元素放在模板里,再定义一个View插入的容器元素
<div class="container"></div>
<script type="text/template" class="template">
    <input class="input" type="text" value="<%= word %>">
    <p>你输入的是:<span class="type"><%= word %></span></p>
</script>

接着定义View类,这样就能把编译后的html插入页面中
var View = Backbone.View.extend({
    el: $('.container'),
    initialize: function() {
        this.render();
    },
    render: function() {
        var template = _.template($('.template').html());
        var word = '请输入';
        // 因为定义时使用jquery对象,所以这里是$el
        this.$el.html(template({word : word}));
    }
});

因为数据是通过Model类(即echo的实例)绑定的,所以我们可以在实例化View类的时候,把模板的实例注册到View中。最终实现View与Model的配合
var Echo = Backbone.Model.extend({
    defaults: {
        word: '请输入'
    },
    initialize: function () {
        // 当name属性被更新时触发
        // API为"change:[attribute]" (model, value, options)
        this.on('change:word', function(model, value) {
            $('.type').text(value);
        })
    }
});
var echo = new Echo();
var View = Backbone.View.extend({
    el: $('.container'),
    initialize: function() {
        this.render();
    },
    render: function() {
        var template = _.template($('.template').html());
        var word = '请输入';
        // 因为定义时使用jquery对象,所以这里是$el
        this.$el.html(template({word : word}));
    }
});
// new View([options])
// 其中传入直接注册到视图中去:model, collection,el等
var view = new View({model: echo});
// 为输入框绑定keyup事件,每次输入时,改变echo属性word的值
$('.input').on('keyup', function(e) {
    echo.set('word', $(this).val());
});







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值