从JS更新字段值

时间:2016-12-21 14:35:30

标签: javascript openerp odoo-8 openerp-8

我创建了一个小部件,用于在看板视图中显示select字段。我需要在更改select字段中的值时更新字段值。

*。js

openerp.kanban_selection = function(instance){
var _t = instance.web._t,
  _lt = instance.web._lt;
  instance.web_kanban.kanbanSelection = instance.web_kanban.AbstractField.extend({

    start: function() {
      this.data = this.field.raw_value;
      this.display_selection();
      return this._super();
    },

    display_selection: function(){
      var self = this;
      console.log('inside selection');
      var select = $("<select />").html(
        $("<option />").val("monthly").html("Monthly")
      ).append(
        $("<option />").val("yearly").html("Yearly")
      ).attr({
        class: "duration_select"
      });
      self.$select = self.$el.append(select)

      select.on("change", function(){
        var l = $(this).find(":selected").text();
        params = {'val':l}
        new instance.web.Model("dashboard")
            .call("getLocations", [this,l],{context: new instance.web.CompoundContext()})
            .then(function(data) {

              self.field_manager.set_values({test: data}).done(function() {
 // here getting an error self.field_manager is undefined
              });
                console.log('data',data);
            });
      });
    }
});
  instance.web_kanban.fields_registry.add("kanbanSelection", "instance.web_kanban.kanbanSelection");
}

*。XML

<field name="duration"  t-attf-graph_type='selection' widget='kanbanSelection'/>
<field name="test" />

*。PY

@api.one
def getLocations(self,durations):
    print'durations',durations
    data = dict(values="123")
    return json.dumps(data)

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我不确定您是否可以通过看板小部件访问此内容。但是,我只是在表单视图小部件中做了类似的事情。对我有用的是这样的。

替换

self.field_manager.set_values({test: data}).done(function() {
    console.log("DONE");
});

使用

self.view.fields.test.set_value(data);

我不确定此方法是否返回承诺。无论出于什么原因,我都没有选择做任何事情,如果存在的话。

但是,在获取getlocations回调数据的地方,您可能希望记录自我对象并检查field_manager是否可用。如果您对我的建议self.view.fields有疑问,则可能需要遍历self对象,以查看这些属性是否包含在self中。

console.log(self);

如果你找不到field_manager它可能只是通过不同的路径可用。