NumberSpinner约束在DataGrid中不起作用

时间:2012-08-22 10:09:59

标签: dojo

我正在使用增强网格单元格的内联编辑,并且有一个NumberSpinner元素。编辑内联时,此numberpinner的约束不起作用。所需的财产工作正常。 我的代码:

{field: 'msorder', width: '10%', name: 'Milestone Order',editable: true, type: dojox.grid.cells._Widget, widgetClass: dijit.form.NumberSpinner, widgetProps: {required:true,smallDelta:1, editorParams:{constraints:{ min:-1000, max:1000, places:0 }} }}

我也尝试过:

{field: 'msorder', width: '10%', name: 'Milestone Order',editable: true, type: dojox.grid.cells._Widget, widgetClass: dijit.form.NumberSpinner, widgetProps: {required:true,smallDelta:1, constraints:{ min:-1000, max:1000, places:0 } }}

3 个答案:

答案 0 :(得分:3)

有一个更简单的解决方案,伙计们:

<强>约束:{分钟:0,最大值:24}

{field: "hours", name: "Stunden",type: dojox.grid.cells._Widget, widgetClass: dijit.form.NumberSpinner, constraint:{min:0,max:24}, widgetProps: {smallDelta:0.25, intermediateChanges:true,}},

它必须在widgetProps之外并且以单数形式...

答案 1 :(得分:2)

我不知道您使用的Dojo版本是什么,但1.6中存在已知的错误,即网格小部件中的约束被忽略。但是,我解决了一个覆盖标准NumberSpinner的问题。

dojo.require("dijit.form.NumberSpinner");

dojo.addOnLoad(function() {

    dojo.declare("mySpinner", [ dijit.form.NumberSpinner], {

            validator: function(v, c){

                var MIN= -1000;
                var MAX = 1000;

                c.min= MIN;
                c.max = MAX ;
                return ((v < MAX ) && (v > MIN));   
            },

    });

    var dateBox = new mySpinner({}).placeAt('foo');
    dateBox.set("value", 1000);

});

(现在,在您的网格结构中,您当然应该使用mySpinner,它应该可以做到这一点。)

演示:http://jsfiddle.net/tvUaK/135/

答案 2 :(得分:0)

我用另一种方法来解决这个问题。我将单元格的类型定义为 Widget ,然后在get方法上创建小部件。

{
 field: 'msorder',
 width: '10%',
 name: 'Milestone Order',
 editable: true,
 type: dojox.grid.cells._Widget,
 get: function(rowIndex, item) {
   var store = this.grid.store,
       value = store.getValue(item, 'value');

   this.widget = new dijit.form.NumberSpinner({ value:0,
     constraints:{ min:-1000, max:1000 }
   });

   return value;
 }
}

通过这种实现,我能够为网格上的每个单元格设置不同的约束。