サーバー(2行のphpコード)からデータをフェッチして、いくつかのデータ(3つのプロパティしかないjsonオブジェクト)を表示しようとしています。そのデータを取得してhtmlページに表示するために、BackboneJSテンプレートとHandlebarsテンプレートをそれぞれ使用しました。これがjavascriptコードです
var User = Backbone.Model.extend({
urlRoot:"getUser/"
});
var UserView = Backbone.View.extend({
el:$("#user"),
initialize: function(){
this.model.bind("change", this.render());
},
render: function(){
var templateSource = $("#user-temp").html();
var template = Handlebars.compile(templateSource);
$(this.el).html(template(this.model));
var newDate = new Date();
console.log("in UserView render :: " + newDate.getTime());
console.log(this.model.toJSON());
//var pp = "nothing";
}
});
var UserRouter = Backbone.Router.extend({
routes:{
"":"userDetails"
},
userDetails:function(){
//var newUser = new User({id:1});
var newUser = new User();
var userView = new UserView({model:newUser});
var newDate = new Date();
newUser.fetch({
success:function(){
console.log("in router :: " + newDate.getTime());
console.log(userView.model.toJSON());
}
});
}
});
index.htmlページのハンドルバーテンプレート
<div id="user"></div>
<script id="user-temp" type="text/x-handlebars-template">
<div>
ID {{attributes.id}}
Name {{attributes.name}}
Age {{attributes.age}}
</div>
</script>
PHPコード
$user = array("name"=>"Arif","id"=>"1","age"=>"100");
echo json_encode($user);
問題は、サーバーから送信しているデータ($ user)がindex.htmlページ、コンソール(google chrome)に表示されないことです。
in UserView render() :: 1350880026092
Object
__proto__: Object
in router :: 1350880026097
Object
age: "100"
id: "1"
name: "Arif"
__proto__: Object
(コンソールのBIG数値はミリ秒単位の時間です。)しかし、コンソール出力のコードを変更した場合(モデルを表示するだけです)
(UserView render()関数で)
console.log(this.model);
(UserRouter userDetails()関数内)
console.log(userView.model);
次に、コンソールは次のようになります
in UserView render :: 1350881027988
child
_changing: false
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object <<======
age: "100"
id: "1"
name: "Arif"
__proto__: Object
changed: Object
cid: "c0"
id: "1"
__proto__: ctor
in router :: 1350881027995
child
_changing: false
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object <<======
age: "100"
id: "1"
name: "Arif"
__proto__: Object
changed: Object
cid: "c0"
id: "1"
__proto__: ctor
ここで属性を確認できます(矢印マーク<< ======)
では、何が間違っているのでしょうか。ここでいくつかの基本的な概念が欠けていますか?ちなみに、HandlebarsとBackboneJSは初めてです。さらに、stackoverflowでの最初の質問なので、私が提供した情報では不十分だと思われる場合は、さらに必要な情報をお気軽にお問い合わせください。
前もって感謝します。