Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 余烬:模型初始值是空的还是空字符串?_Ember.js_Ember Data - Fatal编程技术网

Ember.js 余烬:模型初始值是空的还是空字符串?

Ember.js 余烬:模型初始值是空的还是空字符串?,ember.js,ember-data,Ember.js,Ember Data,我对新模型的初始化值感到困惑 创建新记录时,似乎所有属性都将“null”作为值 只要在文本字段(绑定到模型)中键入内容,然后删除键入的值(因此也是一个空文本字段),属性值就会变为emptystring 这是预期的行为吗 如果您的atribute是DS.attr('string'),REST API接收null还是“”,则两者之间存在差异,因此这是正确的。 不管字符串是null还是空,这只是表示文本不存在。用编程语言思考,您会意识到空值,因为您在访问方法时收到错误。但在业务规则中,字符串是null

我对新模型的初始化值感到困惑

创建新记录时,似乎所有属性都将“null”作为值

只要在文本字段(绑定到模型)中键入内容,然后删除键入的值(因此也是一个空文本字段),属性值就会变为emptystring

这是预期的行为吗


如果您的atribute是
DS.attr('string')
,REST API接收null还是“”,则两者之间存在差异,因此这是正确的。 不管字符串是null还是空,这只是表示文本不存在。用编程语言思考,您会意识到空值,因为您在访问方法时收到错误。但在业务规则中,字符串是null还是空并不重要,因此这是一种常见的模式,例如:

if (name == null || name.length == 0) {
  // name is missing, prompt the user ...
} 
{{input type="text" valueBinding="field"}} 
这是一种罕见的情况:

if (name == null) {
  // some logic here
} else if(name == "") {
  // other logic here
}
关于记录创建。创建时,值为null。但当绑定到文本字段时,例如:

if (name == null || name.length == 0) {
  // name is missing, prompt the user ...
} 
{{input type="text" valueBinding="field"}} 
你有这样的关系:

model.field <-> textfield.value
model.field textfield.value

当您在
model.field
中设置某些内容时,它将与textfield同步,反之亦然。但是在编辑textfield的情况下,值将始终是字符串,这就是在清除textfield时接收空字符串而不是null的原因。

如果REST API中出现这种情况,只需小心。例如,用户创建一个新实体,跳过一些他没有完成的字段,JSON将包含空值;因此REST API需要同时处理JSON中的null和“”值。是的,当该值的目标是一个数字时,举例来说,这是正确的,其中null和“”不是有效值。我研究了各种修改输入的方法来处理这一问题,解决方案似乎是将JSON规范化为只使用“”而不是null;即使您在数据库中将其存储为NULL。设置
DS.attr('string',{defaultValue:”“})
对我也没有帮助。当在表单字段中进行tab并查看isDirty时,这确实会让人困惑。如果初始值为null,因为它是以这种方式存储在DB中的,那么您将关注一个带有“tab”的文本字段,该值将更改为“”,并将记录的isDirty参数设置为true!