BackboneJS将PHP数组返回给[object object]

时间:2014-02-06 16:38:02

标签: javascript jquery json object backbone.js

我是BackboneJS和Jquery的新手,所以在尝试从php数组返回JSON数据时遇到问题。

这是我的代码: 型号:

var NoteModel = Backbone.Model.extend({
    initialize:function(){
    console.log('Model initialize');
        },
    url : '../www/api/controller.php'
});

查看:

var NoteView = Backbone.View.extend({
    el : '#result',
    // /var note = new NoteModel();
    //template : _.template($("#result-view-template").html()),
    initialize:function(){
        console.log('View initialize');
    },
    render :function(){
         //var note = new NoteModel();
         var note = new NoteModel();
         var template = _.template($("#result-view-template").html(),{result : note});
         this.$el.html(template); 
         return this; 
    }
});

路线:

Backbone.emulateHTTP = true;
Backbone.emulateJSON = true;


var NoteRouter = Backbone.Router.extend({
    routes : {
        "result" : "displayMessage"

    },
    displayMessage : function(){
        var notemodel = new NoteModel();
        var noteview  = new NoteView();
        notemodel.fetch({
            success: function(){
                  noteview.render();
                }
            })
        }    
    });



var router = new NoteRouter();


Backbone.history.start();

PHP Api:

<?php 

$datas = array(
    'result '=> 'PHP array data'
    );

$data = json_encode($datas);

echo $data;


?>

Html视图:

<div id="result"></div>
        <script type="text/template" id="result-view-template">
        <%= result %>
             <p>result should be here</p>
        </script>

它应该在#result div上返回php数组数据,但它不是,而不是在#result div上返回[object Object]。

2 个答案:

答案 0 :(得分:0)

您尝试将模型本身解析为模板,但实际上您想要解析模型的获取方法的结果。
您可以从note_View对象的render函数中获取模型对象(从服务器返回),或者在路由器中实例化模型并将其作为'options'参数传递给note_View的初始化函数。

您可以执行以下操作:

路由器:

    var notemodel = new NoteModel();
    notemodel.fetch({
        success: function(returned_model){
            var noteview  = new NoteView({model : returned_model});
            }
        })
    }    

查看:

var NoteView = Backbone.View.extend({
    el : '#result',
    initialize:function(options){
        this.model = options.model; 
        this.render(); 
    },
    render :function(){
         var template = _.template($("#result-view-template").html(),{result : this.model});
         this.$el.html(template); 
         return this; 
    }
});

答案 1 :(得分:0)

您将整个对象传递到模板中。不要放任何这样的物体。如果要访问属性,请将其指定为model.attribute。