【问题标题】:pushObject not parsing JSON to Ember objectpushObject 未将 JSON 解析为 Ember 对象
【发布时间】:2015-09-18 20:35:03
【问题描述】:

我想将数据推送到我的模型。这个模型有一个叫做内容的对象数组。问题是即使我使用 pushObject 方法,Ember 也不会将其解析为 Ember 对象。这导致我的模板没有更新。这是请求的代码:

Ember.$.ajax({
    type: 'POST',
    url: 'conversations/' + self.get('model').id + '/send',
    dataType: 'json',
    data: new_message,
    success: function(data){
        self.get('model.content.sentMessages').pushObject(data);
    },
    error: function(){

    }
  });

如何将 JSON 响应解析为 ember 对象?

编辑:我正在使用 ember-data

App.Conversation = DS.Model.extend({
status: DS.attr(),
readStatus: DS.attr(),
timeAgoElement: DS.attr(),
lastMessage: DS.attr(),
customer: DS.belongsTo('customer'),
user: DS.belongsTo('user'),
content: DS.attr(),
lastReopenedSlug: DS.attr(),

lastReopened: function(){
    return this.get('lastReopenedSlug') === this.get('id');
}.property('lastReopenedSlug', 'id'),

sortedContent: function(){
    if(this.get('content')){
        var content = this.get('content');
        return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
            sortProperties: ['createdAt'],
            sortAscending: true,
            content: content.sentMessages.concat(content.receivedMessages).concat(content.notes).concat(content.assignations).concat(content.statuses)
        });
    }   
}.property('content'),

timeAgoFormated: function(){
    return moment(this.get('timeAgoElement')).fromNow();
}.property('timeAgoElement'),

lastMessageFormated: function(){
    var lastMessage = this.get('lastMessage');
    if(nthOccurrence(lastMessage, ' ', 3) != -1){
        return lastMessage.substr(0, nthOccurrence(lastMessage, ' ', 3)) + "...";
    }
    return lastMessage;
}.property('lastMessage')
});

返回给模板的数据是 sortedContent,这取决于内容。我注意到我的新数据被推送到我想要的内容中,但是以 JSON 格式而不是 Ember 对象格式,这会阻止我的模板更新。

有用的模板渲染:

{{#each elem in model.sortedContent}}
    --display x--
{{/each}}

【问题讨论】:

  • 您可以发布您的模板以及您的退货数据是什么样的吗?澄清一下,你真的在​​使用 Ember Data 吗?如果是这样,请发布您的模型关系。 pushObject 不解析数据,它实际上只是将对象推送到数组中。您可能想先执行 Ember.Object.create(data) (或使用您用于 sentMessages 模型的任何构造函数)。
  • sentMessage 不是模型,它与对话的模型内容相关联。我看不出有任何理由为它创建模型。

标签: ember.js ember-data


【解决方案1】:

您正在将数据推送到content.sentMessages,但model.sortedContent 属性在重新计算之前只查看content。您可能还需要将 content.sentMessages.length 添加到您的 sortedContent 属性 -

sortedContent: function() {
  if (this.get('content')) {
    var content = this.get('content');
    return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
      sortProperties: ['createdAt'],
      sortAscending: true,
      content: content.sentMessages.concat(content.receivedMessages).concat(content.notes).concat(content.assignations).concat(content.statuses)
    });
  }
}.property('content', 'content.sentMessages.length')

这行得通吗?也可以在sortedContent: 中抛出一个console.log('whatever') 以查看它是否在您执行.pushObject() 时被调用

【讨论】:

  • 先生,您真是个天才。我认为查看内容会查看与其相关的所有内容。我错了,你是对的!这行得通!
  • 哈,是的,我认为这会在某些时候咬住每个人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2014-10-17
  • 1970-01-01
相关资源
最近更新 更多