【转载】odoo技术开发白皮书 第三部分 第五章 抽象模型

转载:http://book.odoomommy.com/chapter3/README5.html

第五章 抽象模型

抽象模型(AbstractModel)是MVC中的M部分,提到MVC的M我们一般都倾向于服务端的概念,但是这里我们的说的是Web端的概念。Model的职责是获取相关数据供视图的其他组件使用,当然视图中数据的变化也应该及时传递给Model。Model并非一个Widget,它不需要用来渲染和展示。但是,它是EventDispatcherMixin的子类,也就是说,它可以通过事件冒泡的方式与父类通信。

var AbstractModel = mvc.Model.extend({
    //--------------------------------------------------------------------------
    // Public
    //--------------------------------------------------------------------------

    /**
     * When something changes, the data may need to be refetched.  This is the
     * job for this method: reloading (only if necessary) all the data and
     * making sure that they are ready to be redisplayed.
     *
     * @param {Object} params
     * @returns {Promise}
     */
    reload: function (params) {
        return Promise.resolve();
    },
    /**
     * Processes date(time) and selection field values sent by the server.
     * Converts data(time) values to moment instances.
     * Converts false values of selection fields to 0 if 0 is a valid key,
     * because the server doesn't make a distinction between false and 0, and
     * always sends false when value is 0.
     *
     * @param {Object} field the field description
     * @param {*} value
     * @returns {*} the processed value
     */
    _parseServerValue: function (field, value) {
        if (field.type === 'date' || field.type === 'datetime') {
            // process date(time): convert into a moment instance
            value = fieldUtils.parse[field.type](value, field, {isUTC: true});
        } else if (field.type === 'selection' && value === false) {
            // process selection: convert false to 0, if 0 is a valid key
            var hasKey0 = _.find(field.selection, function (option) {
                return option[0] === 0;
            });
            value = hasKey0 ? 0 : value;
        }
        return value;
    },
});

抽象模型的代码很少,只是在mvc的Model模型基础上新增了两个方法:reload和_parseServerValue。reload方法的目的是为了在必要时重新获取数据,这里只是方法定义,具体的实现需要子类自行实现。_parseServerValue的作用是处理服务端传回的时间日期类型和选择类型的数据。对于时间日期类型,_parseServerValue方法会将其转换为瞬时对象。对于选择类型,将会将false转换为0(因为服务器端总会将0转换为false进行传递。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值