テンプレートに渡すことができるように、モデルの属性を JSON にレンダリングする必要があります。ビューの render() 関数は次のようになります。
render: function() {
console.log(this.model);
console.log(this.model.toJSON());
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
console.log(this.model) を実行した後の属性出力は次のとおりです。
created_at: "2012-04-19"
id: "29"
name: "item"
resource_uri: "/api/v1/item/29/"
updated_at: "2012-04-21"
user: "/api/v1/user/9/"
console.log(this.model.toJSON()) を実行した後のモデルの JSON 出力は次のとおりです。
id: "29"
__proto__: Object
どうしたの?
編集:インスタンス化は次のとおりです。
var goal = new Goal({id: id});
goal.fetch();
var goalFullView = new GoalFullView({
model: goal,
});
新しいビューの内容は次のとおりです。
console.log(this.model.attributes);
console.log(this.model.toJSON());
コンソールの内容は次のとおりです。
Object
created_at: "2012-04-23"
id: "32"
name: "test"
resource_uri: "/api/v1/goal/32/"
updated_at: "2012-04-23"
user: "/api/v1/user/9/"
__proto__: Object
Object
id: "32"
name: "test"
__proto__: Object
toJSON が属性のクローンを作成することになっている場合、正しい名前をコピーしないのはなぜですか? または、created_at、updated_at フィールドをコピーしないのはなぜですか?
編集2:モデルは次のとおりです:
var Goal = Backbone.Model.extend({
// Default attributes for Goal
defaults: {
name: "empty goal",
},
// Check that the user entered a goal
validate: function(attrs) {
if (!attrs.name) {
return "name is blank";
}
},
// Do HTTP requests on this endpoint
url: function() {
if (this.isNew()) {
return API_URL + "goal/" + this.get("id") + FORMAT_JSON;
}
return API_URL + "goal/" + FORMAT_JSON;
//API_URL + "goal" + FORMAT_JSON,
},
});
編集 3: モデルを使用するビューをレンダリングするには、fetch からの成功のコールバックを使用する必要があることがわかりました。
goal.fetch({success: function(model) { var goalFullView = new GoalFullView({ model: goal, }); }});