在ember js app

时间:2017-04-08 16:58:18

标签: javascript ember.js ember-data

我正在构建一个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;
  }

请你帮忙,我做错了什么?

1 个答案:

答案 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