2013-06-19 176 views
1

我有一个应用程序,让我创造出可以被发送到N个社交网络的消息,建模如下:更新对象多对多的关系

Social.Account = DS.Model.extend({ 
    username: DS.attr("string"), 
    messages: DS.hasMany("Social.Message") 
}); 

Social.Message = DS.Model.extend({ 
    text: DS.attr("string"), 
    account: DS.belongsTo("Social.Account") 
}); 

我的代码创建记录是这样的:

saveMessage: function(){ 
    var account = Social.Account.find(this.get("id")), 
     msg = Social.store.createRecord(
        Social.Message, 
        { 
         text: postingWindow.get('text'), 
         account: account, 
        } 
      ); 
    account.get("messages").addObject(msg); 
    Social.store.commit(); 
} 

与窗体数据看起来像这样:

text:testing one three five seven 
message_key: 
tags: 
user_id: 
created:Wed, 19 Jun 2013 21:39:14 GMT 
scheduled_at:2013-06-20T03:00:00.000Z 
is_editing:false 
status:C 
account:56 

使得p艺术作品优秀。现在我们正在调度未来的消息,这为用户提供了在他们保存后但在他们发送之前对其进行编辑的机会。在表面上我的实现似乎正常工作,但我注意到Ember并没有发送帐户信息和帖子,这意味着当我的服务器代码运行时,消息在数据库中被孤立。这里的更新代码:

sendNow: function(message){ 
    var account = Social.Account.find(this.get('controllers.account.id')); 
    message.setProperties({ 
     scheduled_at: '', 
     accounts: [account] 
     // I've also tried accounts: this.get('controllers.account.id') 
    }); 
    Social.store.commit(); 
} 

以及相应的表单数据:

text:testing one three five seven 
message_key: 
tags: 
user_id:17 
created:Wed, 19 Jun 2013 21:39:14 GMT 
scheduled_at: 
is_editing:false 

不管我做什么,灰烬是不是账户数据发送到服务器。是否有更适当的方式更新记录并使其正确保存?

+0

所以看起来这个问题是我们的服务器代码开始。我们正在发送'accounts',但Ember模型是'account'。到目前为止,这不是一个问题,因为消息总是通过帐户调用中的sideload拉入。所以我们现在很好。感谢所有看过这个的人。 – commadelimited

回答

0

你可以尝试:

message.get('accounts').pushObject(account') 
+0

人。那在setProperties和Social.store.commit()调用之间? – commadelimited

+0

是的,但我不会尝试通过setProperties调用 – ianpetzer

+0

设置帐户值这似乎并不奏效。这个:'message.get('accounts')'返回undefined,而this:'message.get('account')'返回null。所以当我尝试使用'pushObject'时出现错误。 – commadelimited

0

确定VaR的帐户被设定?好像你是不符合GET声明:

var account = Social.Account.find(this.get("id")),< - 双引号

var account = Social.Account.find(this.get('controllers.account.id')); < - 单引号和不同对象结构?

另外,你试试: message.set('accounts', account);