2017-04-05 51 views
0

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

但现在我正在编辑该购买,我需要能够做同样的事情,以便能够将数据从带有数据(“detalle”)(作为它的标签)的预加载数组加载到togglebutton中,但似乎没有任何工作,甚至不直接分配小部件或行数据或任何东西。 这里是我的代码片段:

var grid = this; 
    var selectedRow = grid.row(i); 
    var cell = grid.cell(selectedRow, 'Moneda'); 
    selectedRow.Moneda = detalle.MonedaItem; //didn't work 
    if(cell.row !== null && cell.row !== undefined && cell.row.data !== null && cell.row.data !== undefined) 
    cell.row.data.Moneda = detalle.MonedaItem; //didn't work 


    if(cell.element !== null && cell.element !== undefined){ 
     cell.element.innerText = detalle.MonedaItem; //didn't work 
     cell.element.textContent = detalle.MonedaItem; //didn't work 

     if(detalle.MonedaItem === 'UF') 
     cell.element.widget.set('checked', true); 
     if(detalle.MonedaItem === 'CLP') 
     cell.element.widget.set('checked', false); 

     cell.element.widget.set('label', detalle.MonedaItem); //didn't work 
     cell.element.widget.set('value', detalle.MonedaItem); //didn't work 
    } 
    } 

每当我设置为通过更改事件的值以“cell.element.widget.set(‘检查’,布尔值);”当它尝试获取单元格但变量为空时,我从编辑器中收到错误消息,因此它崩溃。

小部件row.data中的“标签”和“值”单元格的值是完美设置的,但网格显示的是小部件的“emptyValue”值,而不是实际设置的值。

回答

0

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

声明cell.row.data.Moneda = detalle.MonedaItem实际上是更改您商店中的数据。只需refresh之后的网格,你就完成了!

不要尝试直接在网格DOM元素中设置某些内容。总是与商店合作,renderCellrenderColumn。这将确保参考商店的商店和网格属性的一致性。

+0

我共享的代码来了grid.refresh(),这确实什么都没有视觉上后。正如我所说的,数据,集合,单元格和小部件可以获得正确的值,但是在editor.js文件中设置值之后,返回“this”,但“this”的值为“错误”标签。所以我添加了另一个函数来通过cell.row.data.Moneda再次设置该值,但随后该更改再次触发editor.js上的函数,然后再次覆盖该值。我知道我不应该试图通过dom分配价值的暴行,但即使这样也行不通。 – kiluakun

+0

您是否尝试过直接在商店中更改值,然后在网格上调用'refresh'? – Himanshu

+0

是的,即使商店和收藏对象中的值是正确的 – kiluakun

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 
    } 
相关问题