backbone.js 使用.set()更新Netsuite记录上的字段无效

u5rb5r59  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(141)

因此,我目前正在尝试从前端的输入更新NetSuite报价记录上的标题字段,以便用户可以自己添加标题。
当提交报价时,我可以设置标题,并看到它已经更新了 Backbone.js 模型,但是当页面加载时,模型已经将标题设置回空。
该功能已经存在与备忘录区,我已经复制了所有的功能,以复制这一标题,但备忘录继续更新,但标题没有。
我对SuiteScripting相当陌生,并尽量避免使用它,但我认为该字段没有更新,因此在其他页面的模型中不可用。

enter   ,   update: function (record_type, id, data_model)
    {
        if (record_type && id)
        {
            this.recordId = id;
            this.data = data_model;

            this.record = this.getTransactionRecord(record_type, id);
            //@property {Transaction.Model.Get.Result} currentRecord This property is used so when performing any update
            //operation you can know what is the current state
            //This property is only present when performing an update operation
            this.currentRecord = this.get(record_type, id);
            this.setPaymentMethod();
            this.setLines();
            this.setAddress('ship', this.data.shipaddress, 'billaddress');
            this.setAddress('bill', this.data.billaddress, 'shipaddress');
            this.setMemo();
            // Set's our Quote title
            this.setTitle();
            // Set's our PO Number and SLC Number
            this.setCustomFields();
        }
    }

    /**
     * Adds fields to the Sales Order when generated via Quotes (possibly via other methods as well)
     */

,   setCustomFields: function ()
    {
        if (this.data.custbody_slc_number) {
            this.record.setFieldValue('custbody_slc_number', this.data.custbody_slc_number);
        }

        if (this.data.otherrefnum) {
            this.record.setFieldValue('otherrefnum', this.data.otherrefnum);
        }
    }

    /**
     * @method setTitle Sets the title attribute into the current transaction
     * @return {Void}
     */

,   setTitle: function ()
    {
        this.record.setFieldValue('title', null);

        if (this.data.title)
        {
            this.record.setFieldValue('title', this.data.title);
        }
    }

    //@method setMemo Sets the memo attribute into the current transaction
    //This method does not use any parameters as it use this.data and this.record
    //@return {Void}
,   setMemo: function ()
    {
        this.record.setFieldValue('memo', null);

        if (this.data.memo)
        {
            this.record.setFieldValue('memo', this.data.memo);
        }
    }

这是创建setTitle()函数并在更新时调用的位置。

, submit: function () {

            this.wizard.model.set('memo', this.$('[data-type="memo-input"]').val());
            this.wizard.model.set('title', this.$('[data-type="title-input"]').val());

            console.log(this.wizard.model);

            return jQuery.Deferred().resolve();

        }

这是提交函数。
因此,在提交时,模型将使用.set()函数进行更新,但是它不会将此字段保存到记录中。
我已经把我的头撞到这个上面有一段时间了,我看不出setMemo和setTitle之间有什么不同。
任何帮助将是惊人的,我很想了解如何添加数据到记录从前端,但它是一个相当迷宫,以解决发生了什么事。
谢谢你!

更新

我已经追溯了数据路径,从视图提交函数到配置,然后再到提交到服务器。
我可以看到,当通过这些阶段记录变量时,标题字段将被设置并保存,直到页面重新加载到报价确认页面,在该页面中,模型的“已更改”部分中的标题被重新定义为“空”。
下面是提交模型的submit函数:

,   save: function ()
                        {
                            _.first(this.moduleInstances).trigger('change_label_continue', _('Processing...').translate());
                            var self = this
                            ,   submit_opreation = this.wizard.model.submit();

                            submit_opreation.always(function ()
                            {
                                _.first(self.moduleInstances).trigger('change_label_continue', _('Submit Quote Request').translate());
                            });                     

                            return submit_opreation;
                        }
                    }

我认为这是一个suitescript问题,而且我对suitescript没有太多经验

setTitle: function ()
        {
            // this.record.setFieldValue('title', null);

            if (this.data.title)
            {
                this.record.setFieldValue('title', this.data.title);
            }
        }

此函数将标题设置为'null',但在此处硬编码值或仅删除if语句时,标题仍设置为'null'。
由于我是SuiteScripting的新手,有人能指出我如何记录“this.data”吗?

dm7nw8vv

dm7nw8vv1#

从我所看到的来看,submit-function将input-values正确地Map到(本地)模型(“我可以[...]看到它已经更新了 Backbone.js 模型”),但是在单击submit按钮之后,它并没有最终将该模型保存到(远程)数据库中(“然而,当页面加载时,模型已经将标题设置回了null。") www.example.com -方法。
因此,您可以尝试将submit-function更改为以下内容:

submit: function () {

   this.wizard.model.set('memo', this.$('[data-type="memo-input"]').val());
   this.wizard.model.set('title', this.$('[data-type="title-input"]').val());

   var dff = jQuery.Deferred();

   // Send model state to database
   this.wizard.model.save(null, {
      success : function(data, response) {
         console.log('success: model saved', data);
         dff.resolve(data);
      },
      error : function() {
         console.log('error: model not saved');
         dff.reject();
      }
   }

   return dff.promise();
}

相关问题