Rails バックエンドを使用する Backbone アプリの app.js ファイルで、コレクションを開始し、fetch() メソッドがレコードの取得を完了した後で、それを jobForm ビューのコレクションとして設定しました。
var app = {
init: function () {
this.collections.job = new this.Collections.job();
this.collections.job.fetch().complete(function(){
app.views.jobForm = new app.Views.jobForm({ collection : app.collections.job });
}
jobForm ビュー (ユーザーがジョブの詳細を入力するためのビュー) 内で、フォームの送信をリッスンし、コレクションを使用してフォームの送信時に新しいジョブを作成します。
events : {
'submit form' : 'addDoc'
},
addDoc : function(e) {
e.preventDefault();
// app.collections.job.create({
console.log(this.collection);
this.collection.create({
job_title : this.$('.job_title').val(),
position : this.$('.position').val(),
company : this.$('.company').val(),
}, { error : _.bind(this.error, this) });
ただし、エラーが発生します
Uncaught TypeError: Object [object Object] has no method 'create'
このコードは、 create メソッドを持っているとは考えていないため、ネットワーク リクエストを作成しようとさえしていません。コレクションを作成する前にコレクションのコンソール ログを作成すると、ジョブのコレクション (アプリにバックボーンを追加する前に作成されたもの) が返されるので、これはコレクションです。
child {cid: "c1", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
_changing: false
_pending: false
_previousAttributes: Object
attributes: Object
changed: Object
cid: "c1"
__proto__: Surrogate
constructor: function (){ return parent.apply(this, arguments); }
initialize: function () {
model: function (){ return parent.apply(this, arguments); }
url: "/jobs"
__proto__: Object
コンソールで、fetch と呼ばれる新しいコレクションをインスタンス化し、いくつかの結果を取得し、collection.at(0) などの他のコレクション メソッドをいくつか試しましたが、オブジェクトにメソッド「at」がないと言われました。 .
不思議なことに、このコード (コレクションにリンクされたフォーム) は、私の別の動作中の Backbone アプリからコピーしたコードです。
したがって、fetch(); を呼び出すことができれば、このオブジェクトをインスタンス化した後、ただし、他のバックボーン コレクション メソッド (「at」や「create」など) を呼び出さないでください。create を呼び出そうとしているこのオブジェクトは何ですか?また、問題を解決するにはどうすればよいでしょうか.. .