2

我有一个以这些参数开头的 dijit.form.NumberTextBox 输入字段:

 new dijit.form.NumberTextBox({
    id: din1,
    style: "width:60px",
    constraints: {
        places: 0,
        pattern: '######'
      }
    },
    din1);

一切都很好..我的问题是我想即时更改“地点”和“模式”参数。所以我写了这个来改变“地点”和“模式”参数:

var myFldObj = dijit.byId(din1);
if (myFldObj) {
  var myConstObj = myFldObj.attr('constraints');
  if (myConstObj) {
     myConstObj.places = 2;
     myConstObj.pattern = '#####.0';
  }
}

因此,在我再次显示表单后,我希望输入字段允许 2 个小数位,但表单仍然像 places=0 和 pattern='######'。当我检查“地点”和“模式”的值时,我得到了我所期望的(2 和#####.0)。我的问题:

您可以即时更改这些值吗?

或者

您是否必须销毁原始 dijit 对象并使用新参数重新创建?

谢谢!!

4

2 回答 2

1

所以,这对我有用:

首先,我认为这是一个错误,因为输入字段的开头像

new dijit.form.NumberTextBox({
    id: "fieldID",
    style: "width:60px",
    constraints: {
        places: 0
      }
    },
    "fieldID");

然后使用如下代码即时更改:

注意:ntbArry - 绑定到 html 输入标签 ID 的 dijit.form.NumberTextBox 对象数组。

for (var x=0;x < ntbArry.length;x++) { 
  var handle = ntbArry[x];
  if (handle) {
    handle.attr('constraints').places = 2;
    handle.attr('constraints').pattern = '#####.0#';      
  } 
}

不表现出与以这种方式创建的字段相同的行为(即时没有约束模式):

new dijit.form.NumberTextBox({
  id: "fieldID",
  style: "width: 60px",
  constraints: {
    places: 2,
    pattern: '#####.0#'
  }
},
"fieldID");

它的行为很接近,但每次输入小数点时,都会弹出错误消息,说明输入无效。在最初使用约束 places=2 和模式“#####.0#”创建的字段上键入小数点时,不会弹出此消息。

因此,要获得我想要的原始行为:

fieldIDEvents 是绑定到 NumberTextBox 字段的 dojo 事件数组。在继续断开 dojo 事件之前

for (var x=0;x < fieldIDEvents.length;x++) {
  var handle = fieldIDEvents[x];
  if (handle) {    
    dojo.disconnect(handle);
  }
}

然后销毁 NumberTextBox dojo 对象

for (var x=0;x < ntbArry.length;x++) {
  var handle = ntbArry[x];
  if (handle) {
    handle.destroy();
    ntbArry[x] = null;
  }
}

接下来,将输入标记放回 html 中,因为它已被破坏:

注意: tdtag 和 html td 标签上的 id 应该包含输入标签。

var fld1 = this.document.getElementById("tdtag");

if (fld1) {
  //alert("\""+fld1.innerHTML+"\"");
  fld1.innerHTML = "<input id=\"fieldID\">";
} 

现在,再次创建 NumberTextBox 对象:

ntbArry[0] = new dijit.form.NumberTextBox({
  id: "fieldID",
  style: "width: 60px",
  constraints: {
    places: 2,
    pattern: '#####.0#'
  }
},
"fieldID");

这是一些额外的步骤,但至少我知道这对我有用。如果我缺少一些基本的东西,请告诉我,很容易错过这些东西的小细节。

于 2010-04-03T21:37:02.347 回答
0

我使用 Dojo 1.3,我可以看到 dijit.form.NumberTextBox 没有patternplaces属性,但有editOptions属性。所以我会尝试像这样改变约束:

myConstObj.editOption.places = 2;
于 2010-04-02T08:02:33.103 回答