Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.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,我正在使用Ember v1.0.0和Ember Data v1.0.0-beta.3,在保存新创建的模型时遇到问题。数据需要保存在一个服务器上,该服务器的API不在我们的控制之下,并且不是RESTful的,因此我们使用一个自定义适配器 我们通过一系列表单向用户收集模型所需的数据,我们将其作为一个普通的JavaScript对象保存,直到用户按下“保存”按钮。此时,我们使用store.createRecord并传入数据对象来创建实际模型,然后调用模型的save方法 这将调用适配器的createRec

我正在使用Ember v1.0.0和Ember Data v1.0.0-beta.3,在保存新创建的模型时遇到问题。数据需要保存在一个服务器上,该服务器的API不在我们的控制之下,并且不是RESTful的,因此我们使用一个自定义适配器

我们通过一系列表单向用户收集模型所需的数据,我们将其作为一个普通的JavaScript对象保存,直到用户按下“保存”按钮。此时,我们使用store.createRecord并传入数据对象来创建实际模型,然后调用模型的save方法

这将调用适配器的createRecord方法,该方法序列化数据并将其发布到服务器。此时,我们没有模型的ID,因为该ID由服务器生成,并在响应服务器请求时返回。此时,我们更新模型,使其具有新生成的ID

我们遇到的问题是,在这个过程之后,当我们导航到模型列表时,那里有一个没有ID的“ghost”模型,以及一个具有正确ID的模型。此ghost模型仅存在于内存中,并且在刷新列表时服务器不会返回

所以,我的问题是:我们这样做是正确的吗?如果是,为什么会出现幽灵模型?我们如何防止它发生

编辑:这里有一些额外的信息。我尝试在创建模型时使用store.push而不是store.createRecord,但是save会抛出一个错误,因为记录处于“empty”状态


我还尝试使用unloadRecord在保存后删除记录(当使用createRecord实例化它时),但这失败了,因为记录的状态是root.loaded.created.uncommitted或root.loaded.created.inFlight,这取决于我调用unloadRecord的位置。无论如何,我必须手动卸载一个遗留对象似乎是错误的——它根本不应该出现,我也不知道为什么会出现

您已在某处创建了“新”记录(可能在编辑操作期间),但未保存或删除该记录。

我最近遇到了相同的问题,以下内容对我来说很好(这是我的一个控制器的一个片段):


我正在从promise success回调调用“unloadRecord”方法,以确保记录已保存/更新,然后转换到“articles”路径。虽然这是可行的,但我也不相信这是处理记录创建的正确方法。

解决方案很简单,但我在其他地方没有遇到过。通过调用
store.updateId(record,{id:newId})
,在返回新分配的模型id的服务器调用之后,记录的id将更新为新值,并且模型的typemap将更新,以便余烬数据“意识到”它已经具有id为
newId
的该类型的模型。第二部分很重要,否则,如果您随后为该类型调用
find
,则余烬数据将创建第二个模型(具有相同的ID)。

如果重影模型的isNew属性为,则该值是多少?@DmitryDemidenko:isNew对于重影模型为true。我认为这意味着烬数据不认为它已经被保存了吗?是的,你已经在某个地方创建了它(可能在编辑操作期间),并且没有保存或移除它,看起来是这样的,是的。不过,我在代码中只调用过store.createRecord一次,然后再调用record.save。然后调用自定义适配器的createRecord方法。也许我应该使用商店的CreateRecord以外的方法是的,我尝试过类似的方法,但调用unloadRecord时出错(不记得是什么,几周前)。即使这样做有效,在第一次保存记录后必须卸载它似乎是非常错误的。。。
var router = this.get('target');            
var article = this.store.createRecord('article', { name: name, size: size, quantity: quantity });
article.save().then(function(){
            article.unloadRecord();
            router.transitionTo('articles');
        });