道场 - 如何设置"标签"从row.data.SOMEFIELD值到网格内的togglebutton?

时间:2017-04-05 19:37:31

标签: dojo togglebutton dgrid

我是Dojo的新手。 我有一个" FullEditable"网格,有很多列,其中一个是小部件,它是一个ToggleButton。此网格用于显示购买的详细信息,因此每行代表销售的产品。当我单击其中一列中的按钮时,它会启动产品(对话框)浏览器,然后将该产品的数据传递给网格。经过一些工作后,我设法显示按钮,并能够根据从该对话框收到的row.data.FIELD值设置它的标签。

但是现在我正在编辑那次购买,我需要能够做同样的事情,以便能够从预装数组中加载数据(" detalle")(因为它' s标签)进入togglebutton,但似乎没有任何工作,甚至没有直接分配小部件或行数据或任何东西。 这是我的代码片段:

e

每当我通过更改事件使用" cell.element.widget.set(' checked',boolean)设置值;"我从编辑器收到一条错误消息,当它试图获取一个单元但变量为null时,它就崩溃了。

"标签"的值和"价值"对于小部件,row.data en cell是完美设置的,但是网格显示" emptyValue"小部件的值,而不是实际设置的值。

2 个答案:

答案 0 :(得分:0)

AFAIK,更改网格数据的最佳方法是更新与网格关联的商店/集合,然后只调用grid.refresh()。新数据将自动加载。

声明cell.row.data.Moneda = detalle.MonedaItem实际上正在更改商店中的数据。在此之后只需refresh网格即可完成!

永远不要尝试直接在网格DOM元素中设置内容。始终使用商店renderCellrenderColumn。这将确保引用商店的商店和网格属性的一致性。

答案 1 :(得分:0)

我终于设法通过renderCell得到了我需要的东西:

,{
      id: 'Moneda', 
      field: 'Moneda',
      label: "Moneda",
        renderCell: function (object, value, node, options) {
          try {
            var button = new ToggleButton({
              node: node,
              isWidgetInGrid: true,
              parameterName: 'codigoMoneda',
              label: object.Moneda,
              showLabel: true,
              onChange: function(newValue){
                var grid = this.getParent();
                var row = grid.row(this.node);
                var data = row.data;
                if(this.get('label') === 'CLP')
                {
                  data.Moneda = 'UF';
                  this.set('label','UF');
                  this.set('value', 'UF');
                }
                else
                {
                  data.Moneda = 'CLP';
                  this.set('label','CLP');
                  this.set('value', 'CLP');
                }
                grid.getParent().getParent()._calcularTotales();
              }
            });

            node.appendChild(button.domNode);
          }
          catch (ex) {
            Debug.log(this.declaredClass, arguments, ex);
          }
        },
      emptyValue: 'CLP',
      autoSave: true
    }