zoukankan      html  css  js  c++  java
  • backbone Model调用save方法的时候提交方式

    horizon使用的是backbone框架,但是我们的后台api都是只接收post请求,请求的路径为/api/,根据backbone的官档解释:

    backbone的model.save方法会判断当前的model对象是否存在存在服务器中,如果存在服务器中,则调用"update" (HTTP PUT), 如果不存在,则调用"create" (HTTP POST), 判断的依据即为当前的model的属性'id'是否存在。

    举例如下:

        var UpdateAgentV = ModalView.extend({
            initialize: function(data) {
                this.model = new UpdateAgentM();
                this.setDefault();
                this.defaults.id = 'edit-agent';
                this.defaults.header = translate('operations.edit');
                this.renderModal();
    
                this.model.bind('change', this.render, this);
                this.model.set({
                    agents_id: data.project_id
                });
                this.getAgent(data.project_id);
            },
            getAgent: function(project_id){
                var $this = this;
                this.ajaxRequest({
                    action: 'GetAgentsDetail',
                    project_id: project_id
                }, function(res){
                    $this.model.set({
                        account_bank: res.data.account_bank,
                        account_name: res.data.account_name,
                        account_number: res.data.account_number,
                        url: res.data.url,
                        logo: res.data.logo,
                        company: res.data.company,
                    });
                });
            },
            render: function() {
                tpl = _.template($("#template-edit-agent").html());
                this.defaults.body =  tpl(this.model.toJSON());
                this.$el.html(this.template(this.defaults));
                $('.modal-dialog').draggable({ handle: "div.modal-header" });
                return this;
            },
        });
        var UpdateAgentM = ModalModel.extend({
            defaults: {
                action: 'UpdateAgents',
                agents_id: '',
                account_bank: '',
                account_name: '',
                account_number: '',
                url: '',
                logo: '',
                company: '',
            },
            initialize: function() {
                this.validator();
            },
            validator: function() {
                $("#edit-agent").find("form").validate({
                    rules: {
                        account_bank: {
                            required: true
                        },
                        account_name: {
                            required: true
                        },
                        account_number: {
                            required: true
                        },
                        url: {
                            required: true
                        },
                        logo: {
                            required: true
                        },
                        company: {
                            required: true
                        },
                    }
                });
            },
            create: function(element) {
                var data = this.formSerialize(element);
                this.set(data);
                this.saved(agentsView);
            }
        });

    上例中若将UpdateAgentV的initialize的this.model.set({agents_id: data.project_id});改为this.model.set({id: data.project_id});, 则在model调用save方法时则会认为当前的model已经存在,提交数据就会用PUT方法。

  • 相关阅读:
    VUE报错: Duplicate keys detected: '0'. This may cause an update error.
    VUE中 resource如何引入和GET POST JSONP 如何使用
    VUE中 axios GET和POST 如何使用
    微信小程序封装组件,子父组件通信 详细解析
    CSS3文字超出块元素显示省略号
    微信小程序处理后端返回图片二进制流,渲染页面
    记录平台向用户发送消息功能界面(HTML+CSS)
    原生JavaScript写出日历功能 无引用Jq
    mongoTemplate Aggregation first
    封装返回前端的通用格式
  • 原文地址:https://www.cnblogs.com/forilen/p/4798505.html
Copyright © 2011-2022 走看看