我正在构建一个ember应用程序。我有两页。一个显示供稿列表,另一个供应商(点击一个供稿时打开)显示供稿的详细信息
每件事情都运转正常,但是当我从Feed详细信息页面按下浏览器的后退按钮时,它会抛出错误,而前一页是Feed列表页面无法加载。
我的错误
Error while processing route: feed.index Cannot convert object to primitive value TypeError: Cannot convert object to primitive value
at EmptyObject.SETTER_FUNCTION [as likes] (http://192.168.59.8:4200/assets/vendor.js:36917:100)
at assign (<anonymous>)
at InternalModel.setupData (http://192.168.59.8:4200/assets/vendor.js:96156:9)
at Class._load (http://192.168.59.8:4200/assets/vendor.js:104324:21)
at Class._pushInternalModel (http://192.168.59.8:4200/assets/vendor.js:104685:32)
at Class._push (http://192.168.59.8:4200/assets/vendor.js:104625:36)
at http://192.168.59.8:4200/assets/vendor.js:105374:32
at Backburner.run (http://192.168.59.8:4200/assets/vendor.js:16233:23)
at Class._adapterRun (http://192.168.59.8:4200/assets/vendor.js:104883:31)
at http://192.168.59.8:4200/assets/vendor.js:105372:13
ember.debug.js:17631 TypeError: Cannot convert object to primitive value
at EmptyObject.SETTER_FUNCTION [as likes] (ember.debug.js:21402)
at assign (<anonymous>)
at InternalModel.setupData (internal-model.js:258)
at Class._load (store.js:1736)
at Class._pushInternalModel (store.js:2097)
at Class._push (store.js:2037)
at finders.js:166
at Backburner.run (ember.debug.js:718)
at Class._adapterRun (store.js:2295)
at finders.js:164
我的Feed模式低于
import DS from 'ember-data';
const{attr} = DS;
export default DS.Model.extend({
"likes": attr('number'),
"userLiked": attr('number'),
"commentCount": attr('number'),
"description": attr('string'),
"date": attr('string'),
"tags": attr(),
"imagePath": attr('string'),
"link": attr('string'),
"userId": attr('number'),
"userName": attr('string'),
"name": attr('string'),
"title": attr('string'),
"visitCount": attr('number')
});
我路线的模型方法如下
model(){
var inflector = Ember.Inflector.inflector;
inflector.irregular('feed', 'feeds.php');
inflector.uncountable('advice');
const authData = getAuthData();
if(authData.loggedInUser != null){
return this.get('store').query('feed',{page:1,loggedInUser:authData.loggedInUser});
}
}
我尝试使用chrome&#dev开发工具调试代码。一切都很完美。但它在ember-debug.js(我假设是生成代码)中的某处抛出错误
以下是ember-debug.js中从
开始出错的方法function MANDATORY_SETTER_FUNCTION(name) {
function SETTER_FUNCTION(value) {
var m = _emberMetalMeta.peekMeta(this);
if (!m.isInitialized(this)) {
m.writeValues(name, value);
} else {
_emberMetalDebug.assert('You must use Ember.set() to set the `' + name + '` property (of ' + this + ') to `' + value + '`.', false);
}
}
SETTER_FUNCTION.isMandatorySetter = true;
return SETTER_FUNCTION;
}
请你帮忙,我做错了什么?
答案 0 :(得分:0)
TL; DR::每次访问 / feed 页面时,您必须生成供稿模型的新ID 。>
假设我们有一个名为 / feed 的页面,另一个名为 / detailed 的页面。
步骤1。首先,我们在页面 / feed 上,Ember应用程序检索包含Ember数据的数据。我们检索提要模型,并将其与后端服务给定的ID“ feed-01”一起存储。
第2步。接下来,我们进入页面 / detailed ,Ember应用程序检索包含Ember数据的Feed详细信息,并将模型与后端服务提供的ID存储在一起:“ feed-detail- 01“。
从那里开始,一切正常。
第3步。但是,当我们返回上一页 / feed 时,Ember应用程序将检索供稿模型,并将其存储在ID为“ feed-01”的ID中,但该ID与步骤1.这就是Ember引发错误的原因。
因此,每次我们从/ feed页面检索Feed模型时,您的后端服务都必须生成新ID 。