アカウントがソーシャルメディアにメッセージを投稿できるようにするアプリケーションに取り組んでいます。最初のメッセージをEmberデータストアに保存しようとしていますが、機能していないようです。問題は、それもエラーではないので、何が起こっているのかわからないということです。設定は次のとおりです。
モデル
Social.Account = DS.Model.extend({
username: DS.attr('string'),
messages: DS.hasMany('Social.Message')
});
Social.Message = DS.Model.extend({
user_id: DS.attr('number'),
text: DS.attr('string'),
accounts: DS.hasMany('Social.Account'),
posts: DS.hasMany('Social.Post')
});
Social.Post = DS.Model.extend({
created: DS.attr('date'),
text: DS.attr('string'),
message: DS.belongsTo('Social.Message')
});
データ
Social.Account.FIXTURES = [{
id: 1,
username: "commadelimited",
messages: [1, 2]
}];
Social.Message.FIXTURES = [{
id: 1,
user_id: 1,
text: 'This is message #1 sent by account #1',
accounts: [1],
posts: [1]
}, {
id: 2,
user_id: 1,
text: 'This is message #2 sent by account #1',
accounts: [1],
posts: [2]
}];
Social.Post.FIXTURES = [{
id: 1,
created: "5 minutes ago",
text: 'This is post #1 sent by account #1, tied to message #1'
}, {
id: 1,
created: "5 minutes ago",
text: 'This is post #2 sent by account #1, tied to message #2'
}];
Social.NewPostViewのコンテキストでは、送信メソッドを呼び出すボタンがあります
Social.NewPostView = Ember.View.extend({
tagName: 'div',
submit: function(e) {
msg = Social.Message.createRecord({
id: 1,
user_id: 1,
text: 'This was a created message',
created: "2013-02-27 13:09:22",
accounts: [1],
posts: [1]
});
console.log('done');
}
});
ユーザーがボタンをクリックしたときにアラートボックスをトリガーできるので、メソッドが起動していることがわかります。ここでcreateRecord呼び出しをハードコーディングしたことがわかります(ただし、アプリではユーザーが入力したデータを使用しています)。ログステートメントがコンソールに表示されますが、UIが期待どおりに変更されていません。さらに、ユーザー1のアカウントオブジェクトをイントロスペクトすると、長さが0になります。
Social.Account.find().objectAt(0).get('messages').get('length')
コンソールでこのステートメントを実行すると、何かが表示されます。
Social.Message.createRecord({ user_id: 1, text: 'This was a created message', created: "2013-02-27 13:09:22", accounts: [1], posts: [1] })
しかし、それは複雑なオブジェクトであり、実際に何であるかはわかりません。私は@toranbのcomplex-ember-data-exampleプロジェクトに基づいてコードを作成していますが、同等のようです。私は何か間違ったことをしていると確信していますが、それが何であるかはわかりません。すべての入力が評価されます。
更新1
送信する前にログを記録Social.Message.find().get('length')
すると、0になります。送信を押すと、すぐに同じログステートメントを実行して次のようになります。
4
Uncaught Error: Attempted to handle event `loadedData` on <Social.Message:ember427:1> while in state rootState.loaded.created.uncommitted. Called with undefined
これは、メッセージが実際に作成されているが、UIに表示されていないことを示しています。私の次のステップは何でしょうか?