2016-12-23 8 views
3

Я добавил новую кнопку рядом с созданной в FormView.Odoo 10 - передать контекст мастеру, вызванному кнопкой внутри шаблона FormView.buttons

<t t-extend="FormView.buttons"> 
    <t t-jquery="button.o_form_button_create" t-operation="after"> 
     <t t-if="widget.fields_view.name == 'site.form'"> 
      <button type="button" 
        class="btn btn-primary btn-sm oe_create_customer_button_form"> 
       Create Customer Site 
      </button> 
     </t> 
    </t> 
</t> 

Я связала действие на него, чтобы открыть форму мастера.

Теперь я передам значения из записи, отображаемой в форме в момент вызова мастера, но у меня возникают проблемы. Он содержит только ссылку на первую открытую запись, поэтому, когда я вызываю мастера из другой записи, он будет отображать данные из первого.

instance.web.FormView.include({ 
    render_buttons: function() { 
     var self = this 
     this._super.apply(this, arguments) 

     // GET BUTTON REFERENCE 
     if (this.$buttons) { 
      var btn = this.$buttons.find('.oe_create_customer_button_form') 
     } 
     self.do_query(btn) 
    }, 
    do_query: function(btn) { 
     var self = this 
     var context = {} 

     // QUERY THE MODEL -- DOES NOT WORK PROPERLY 
     // TO PASS PARENT 
     new instance.web.Model('broadband.site') 
      .query() 
      .filter([['id', '=', self.dataset.ids[0]]]) 
      .first() 
      .done(function(res) { 
       if(res) { 
        context = { 
         'default_parent_id': res.id 
        } 
       } 
       self.do_new_button(context, btn) 
      }) 
    }, 
    do_new_button: function (context, btn) { 
     var self = this 

     var action = ({ 
      type: 'ir.actions.act_window', 
      res_model: 'broadband.wizard', 
      view_type: 'form', 
      view_mode: 'form', 
      views: [[false, 'form']], 
      target: 'new', 
      context: context 
     }) 

     btn.on('click', function() { 
      self.do_action(action) 
     }) 
    } 
}) 

ответ

0

[РЕШИТЬ]

Я переписал 'load_record' функцию, чтобы получить 'datarecord' объект и использовать его вместо 'набора данных'.

Вот код:

instance.web.FormView.include({ 
    is_site: function() { 
     if (this.dataset.model && this.dataset.model == 'broadband.site') { 
      return true 
     } else { 
      return false 
     } 
    }, 
    render_buttons: function() { 
     if(this.is_site() && !this.$buttons) { 
      this._super.apply(this, arguments) 
     } 
    }, 
    load_record: function() { 
     var self = this 

     if(this.is_site()) { 
      self._super.apply(this, arguments) 
      var btn = self.$buttons.find('.oe_create_customer_button_form') 
      btn.hide() 
      if(self.datarecord.site_type != 'last_mile') { 
       btn.show() 
      } 
      self.do_query(btn) 
     } else { 
      self._super.apply(this, arguments) 
     } 
    }, 
    do_query: function(btn) { 
     var self = this 
     var context = {} 
     var passed = false 

     if(this.is_site()) { 

      var site_id = self.datarecord.id 

      btn.on('click', function() { 
       new instance.web.Model('broadband.site') 
        .query() 
        .filter([['id', '=', site_id]]) 
        .first() 
        .then(function(res) { 
         if(res && !passed) { 
          context = { 
           'default_parent_id': res.id 
          } 
          self.do_button_action(context) 
          passed = true 
         } 
        }) 
      }) 
     } 
    }, 
    do_button_action: function (context) { 
     var self = this 

     var action = ({ 
      type: 'ir.actions.act_window', 
      res_model: 'broadband.wizard', 
      view_type: 'form', 
      view_mode: 'form', 
      views: [[false, 'form']], 
      target: 'new', 
      context: context 
     }) 

     self.do_action(action) 

    } 
}) 
Смежные вопросы